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

sandover / ergo

fast, minimal CLI tool for better coding agent planning

GoMIT★ 38 estrellas⑂ 5 forksdesde ene 2026Ver en GitHub ↗

sandover/ergo tiene un índice de salud de 57 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es AI Readiness (81/100) y la más baja, Security (38/100). Se actualizó por última vez hace 1 día. Una sola persona concentra la mayor parte del trabajo reciente.

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

57
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

Brandon HarveyCuenta personal
16 seguidores25 repositorios públicosdesde mar 2010

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/sandover/ergov1.2.0-40hace 9 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 1 días
9.7/36Cadencia de commits — 14/52 semanas con commits
18/18Volumen de commits — 235 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year235
human_commit_share1
days_since_last_push1
active_weeks_last_year14
Cómo se puntúa
27/27Publica versiones — 44 versiones publicadas
36/36Recencia de las versiones — última versión hace 1 días
27/27Cadencia de publicación — una versión cada ~16,5 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count44
latest_release_tagv4.0.0
releases_from_tagsno
days_since_latest_release1
mean_days_between_releases16,5

Comunidad y Adopción

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

39En riesgo · 18% del índice global
Cómo se puntúa
25.4/60Estrellas — 38 estrellas
5/25Forks — 5 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks5
stars38
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

48En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.2/22.5Distribución de commits — el principal contribuyente firma el 99% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,991
Cómo se puntúa
9.3/46.8Resolución de issues — 20% de issues cerradas
38.2/38.3Aceptación de PR — 4/4 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs4
open_issues4
closed_issues1
issue_closed_ratio0,2
closed_unmerged_prs0
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
8.8/25Alcance del propietario — 16 seguidores de sandover
22.3/25Trayectoria — 25 repos públicos, cuenta de ~16 años
Datos de entrada utilizados
followers16
owner_typeUser
is_verified
owner_loginsandover
public_repos25
account_age_days5976
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 9 días
20/20Historial de versiones — 40 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/sandover/ergo
ecosystemsgo
any_deprecatedno
min_days_since_publish9

Calidad de Ingeniería

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

72Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://github.com/sandover/ergo
10/10Descripción del repositorio
10/10Topics — 5 topics
0/10Wiki
Datos de entrada utilizados
topicsbeads-cli, claude-code, codex, codex-cli, planning
has_wikino
homepagehttps://github.com/sandover/ergo
has_readme
has_docs_dir
has_description

Seguridad

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

38En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
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/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 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 — no SAST tool detected
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.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,8
Excluidos de la puntuación (sin datos o no aplicable): ci_tests. Los pesos restantes se han renormalizado.

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.

81Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 82 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,82
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes935
Cómo se puntúa
18/18Arranque con un solo comando — Taskfile.yml
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 8 de los últimos 100 commits con autoría o crédito de agente
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_dockerfileno
typed_language
bootstrap_filesTaskfile.yml
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,08
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54/55Tamaños de archivo manejables — 1/55 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes78.739
source_files_sampled55
oversized_source_files1

Datos clave

38estrellas de GitHub
2contribuidores
235commits en los últimos 12 meses
1días desde el último push
44versiones publicadas
1factor bus
4issues abiertas
Goecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

Historial de estrellas y forks 0 ★ / 5 ⇿
0Estrellas
5Forks
9Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

12345512026-022026-052026-07
Mayor 1Menor 3Parche 5
OpenSSF Scorecard 3.8 / 10
3.8agregado

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 01:51 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 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
0SASTno SAST tool detected
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
9Vulnerabilities1 existing vulnerabilities detected
Dependencias directas 4
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/mattn/go-runewidthv0.0.16go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogolang.org/x/sysv0.40.0go.mod
Gogolang.org/x/termv0.39.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": [
        "beads-cli",
        "claude-code",
        "codex",
        "codex-cli",
        "planning"
      ],
      "is_fork": false,
      "size_kb": 12529,
      "has_wiki": false,
      "homepage": "https://github.com/sandover/ergo",
      "languages": {
        "Go": 374424,
        "Shell": 1659
      },
      "pushed_at": "2026-07-26T18:09:54Z",
      "created_at": "2026-01-09T18:34:34Z",
      "owner_type": "User",
      "updated_at": "2026-07-26T18:10:33Z",
      "description": "fast, minimal CLI tool for better coding agent planning",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://brandonharvey.io",
      "name": "Brandon Harvey",
      "type": "User",
      "login": "sandover",
      "company": null,
      "location": "Los Angeles, CA",
      "followers": 16,
      "avatar_url": "https://avatars.githubusercontent.com/u/224739?v=4",
      "created_at": "2010-03-17T18:24:50Z",
      "is_verified": null,
      "public_repos": 25,
      "account_age_days": 5976
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v4.0.0",
          "kind": "major",
          "published_at": "2026-07-26T18:07:00Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2026-07-22T22:00:33Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2026-07-21T04:13:06Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2026-07-21T03:34:55Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-07-19T00:04:43Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-07-08T15:04:31Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-05-22T23:28:06Z"
        },
        {
          "tag": "v0.11.2",
          "kind": "patch",
          "published_at": "2026-05-18T20:36:36Z"
        },
        {
          "tag": "v0.11.1",
          "kind": "patch",
          "published_at": "2026-03-02T00:40:02Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-02-28T16:39:01Z"
        },
        {
          "tag": "v0.10.3",
          "kind": "patch",
          "published_at": "2026-02-18T02:16:45Z"
        },
        {
          "tag": "v0.10.2",
          "kind": "patch",
          "published_at": "2026-02-18T01:48:01Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2026-02-18T01:37:53Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-02-16T17:15:42Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2026-02-05T19:47:09Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2026-02-02T23:50:30Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-01-31T18:10:44Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-01-30T22:48:31Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2026-01-30T17:36:29Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-01-30T00:52:05Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-01-30T00:25:50Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-01-29T16:39:58Z"
        },
        {
          "tag": "v0.5.8",
          "kind": "patch",
          "published_at": "2026-01-19T19:53:44Z"
        },
        {
          "tag": "v0.5.7",
          "kind": "patch",
          "published_at": "2026-01-19T16:23:38Z"
        },
        {
          "tag": "v0.5.6",
          "kind": "patch",
          "published_at": "2026-01-19T05:57:42Z"
        },
        {
          "tag": "v0.5.5",
          "kind": "patch",
          "published_at": "2026-01-18T19:02:40Z"
        },
        {
          "tag": "v0.5.4",
          "kind": "patch",
          "published_at": "2026-01-17T00:08:51Z"
        },
        {
          "tag": "v0.5.3",
          "kind": "patch",
          "published_at": "2026-01-16T23:09:39Z"
        },
        {
          "tag": "v0.5.2",
          "kind": "patch",
          "published_at": "2026-01-16T19:31:43Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-01-16T03:09:43Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-01-16T01:03:10Z"
        },
        {
          "tag": "v0.4.5",
          "kind": "patch",
          "published_at": "2026-01-16T00:22:08Z"
        },
        {
          "tag": "v0.4.4",
          "kind": "patch",
          "published_at": "2026-01-15T22:08:48Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-01-15T21:41:55Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-01-15T21:08:11Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-01-15T00:27:56Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-01-14T18:19:22Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-01-14T18:03:23Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-01-14T17:49:02Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-01-14T02:07:33Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-01-13T21:08:35Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-01-12T20:40:07Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-01-12T20:37:24Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-01-12T20:22:56Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "cb09d663e57a1a003055776e85062c69492f80cc",
          "body": null,
          "is_bot": false,
          "headline": "Record completed Ergo 4.0.0 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-26T18:09:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0c401ff428612dbb49e1b582a0407e5fa24da45",
          "body": null,
          "is_bot": false,
          "headline": "Record approval to publish Ergo 4.0.0",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-26T18:04:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28fdad4449204d4c8dc55ec9a532d69fd4d18b51",
          "body": null,
          "is_bot": false,
          "headline": "Begin Ergo 4.0.0 publication",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-26T17:52:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc9cca6792ccb0af116034bd9558f75c43783b53",
          "body": null,
          "is_bot": false,
          "headline": "Record validated Ergo 4.0.0 candidate",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-26T17:52:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8694700b633b75b1669f323186c4b72cec4b17d4",
          "body": null,
          "is_bot": false,
          "headline": "Track Ergo 4.0.0 release validation",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-26T17:47:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33ef56b4df6e3f33299aa6bfffb112bbeb032633",
          "body": null,
          "is_bot": false,
          "headline": "Prepare Ergo 4.0.0 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-26T17:46:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "554026359221d6945a9fc3de522f41495e196e64",
          "body": null,
          "is_bot": false,
          "headline": "Fix command help input omissions",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-25T02:14:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20237103d63e554ca7529c05b27d173152bfec09",
          "body": "- Remove prose and examples from subcommand help\n- Keep generated usage, options, and command-group listings\n- Make root help and quickstart the complete manual\n- Scope --agent to the claim command\n- Align the README, specification, changelog, and shipped skill\n- Add help-role and flag-scope regression coverage",
          "is_bot": false,
          "headline": "Reduce command help to syntax",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-24T23:41:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db8fbf6e2a7fa718bcb6797dc9702fcc6a935830",
          "body": "- Remove the unused JSON field extraction helper\n- Remove the unused task status label helper\n- Preserve current field suggestion behavior\n- Describe the current input helper purpose\n- Restore a clean golangci-lint run",
          "is_bot": false,
          "headline": "Remove obsolete CLI helpers",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-24T20:33:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "633575b85aeb86bea63110eabb195632e7a1c2e2",
          "body": "- Count dependency-gated todo tasks as waiting\n- Reserve blocked counts for explicitly blocked tasks\n- Show waiting counts in list summaries\n- Sort ready trees by the automatic-claim order\n- Cover both behaviors with focused tests",
          "is_bot": false,
          "headline": "Align ready-list output with task semantics",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-24T00:26:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e533c4aad6e5c50d45616b0c1886195586494435",
          "body": "- Replace JSON creation with positional task and epic commands\n- Add agent-oriented mutation receipts and compact backlog output\n- Restore hierarchical help and rewrite the complete manual\n- Align the README, specification, architecture, release guide, and shipped skill\n- Default new repositories to backlog.jsonl while preserving older logs\n- Expand migration, storage, fixture, race, and role-aware documentation coverage",
          "is_bot": false,
          "headline": "Rebuild Ergo around a dependency-aware backlog",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-23T23:12:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94e81434499ca574964f94fbf1065ef104b3946a",
          "body": "- Move bulk Markdown creation to ergo new epic.\n- Remove the root plan command and its unused internal wrapper.\n- Update the help, quickstart, README, spec, and planning skill.\n- Distinguish a leaf parent from an epic marker in show output.\n- Rename compact confirmation for a user-facing log operation.\n- Add regression coverage for the removed command and new output schema.",
          "is_bot": false,
          "headline": "Adopt the new epic command surface",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-23T21:58:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "170edd75dd6a56391f58e4d91d349897e9f031b9",
          "body": "- Replace abstract command-surface language with plain prose\n- State the global output change accurately\n- Clarify lifecycle notes and body replacement\n- Make the two-command body migration easier to scan\n- Add the Homebrew upgrade command to the release page\n- Rewrite the older-binary compatibility warning\n- Keep the changelog aligned with the published release",
          "is_bot": false,
          "headline": "Polish the Ergo 3 release notes",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T22:07:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6da42e6f9d219788d37beb659cebf6703c00af96",
          "body": "- Mark the release task complete\n- Record the immutable release commit and tag\n- Record successful release workflow and remote CI\n- Record archive and checksum verification\n- Record the downloaded-binary lifecycle smoke\n- Record the Homebrew 3.0.0 installation and lifecycle smoke\n- Note that WinGet publishing is not configured\n- Complete the Ergo 3.0 epic",
          "is_bot": false,
          "headline": "Record the Ergo 3.0.0 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T22:03:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebda77a425fdf53e3556bef8bb365be19fe51d6a",
          "body": "- Add concise release notes for the readable command surface\n- Map each breaking 2.x workflow to its 3.0 replacement\n- Explain lifecycle messages and body replacement boundaries\n- Document symmetric sequence and unsequence commands\n- Record result-path and append-only attempt behavior\n- State existing-log compatibility and older-binary limits\n- Close the approved manual checkpoint\n- Claim the final publish and verification task",
          "is_bot": false,
          "headline": "Prepare the Ergo 3.0.0 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T21:58:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f1a1008b07b2f77733452c6080ce854188b02b2",
          "body": "- Replace the abstract summary with the stateful task model\n- Lead help and quickstart with create, list, claim, and complete\n- Use an explicit task ID throughout the primary workflow\n- Remove descriptions agents learn naturally from command output\n- Remove historical CLI tombstones from current documentation\n- Keep input, lifecycle, graph, and maintenance constraints concise\n- Align the README and specification with the approved manuals\n- Add regression coverage for the workflow-first structure",
          "is_bot": false,
          "headline": "Make the Ergo manuals action-first",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T21:57:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40f22e69213d64014e59390b2d08d83dd01805c0",
          "body": "- Lead help with the fixed-position two-command agent loop\n- Cover every public command, flag, and input boundary\n- Distinguish creation JSON and event JSONL from removed JSON output\n- Document lifecycle messages, body stdin, and result paths precisely\n- Update the spec, architecture, release guide,\n[…]\n and samples\n- Improve the shipped planning skill for the Ergo 3 vocabulary\n- Add tests that lock help and quickstart surface coverage\n- Validate the manuals, legacy replay, skill package, and full CI",
          "is_bot": false,
          "headline": "Rewrite the Ergo 3 manuals",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T21:32:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "40785c4957516d813e996aa5c2ff7c04982a97b4",
          "body": "- replace v1 and v2 mutation fixtures with focused public-command helpers\n- cover lifecycle messages with zero, one, and repeated message values\n- verify lifecycle stdin and removed summary input append no events\n- exercise readable creation, path, claim, list, show, and maintenance output\n- prove s\n[…]\nay legacy lifecycle bodies and distinct result summaries without migration\n- register sequence and unsequence as the public dependency pair\n- pass compiled CLI tests and the full race-enabled CI suite",
          "is_bot": false,
          "headline": "Lock the Ergo 3 CLI contract",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T21:20:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f64535b8fd1155723d979596dbc89c77a1143306",
          "body": "- remove the global JSON flag and every output-only schema and branch\n- reject legacy JSON and summary flags with direct Ergo 3 migration guidance\n- give create, edit, move, lifecycle, dependency, and maintenance commands concise confirmations\n- render discovery and claim data through the one readab\n[…]\nertions\n- cover removed flags before and after representative commands\n- keep lifecycle, result, dependency, compaction, and legacy-log behavior intact\n- pass the full race-enabled repository CI suite",
          "is_bot": false,
          "headline": "Remove duplicate JSON output",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T21:13:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2914b84542fe4a50531e0c083bdb3d1351de374c",
          "body": "- Share one complete task document between show and claim\n- Keep task IDs fixed at the start of YAML front matter\n- Render dependencies, lifecycle messages, and results as Markdown\n- Preserve distinct legacy result captions without repeating paths\n- Add literal state and claim labels to list output\n- Remove warnings that direct agents to JSON\n- Cover task documents, list labels, and claim next commands\n- Mark the read-surface backlog task complete",
          "is_bot": false,
          "headline": "Make work discovery readable for agents",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T20:56:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eefc3999b6b8f25d77d720693ba61e98c91de2d4",
          "body": "- Add repeatable message flags to every lifecycle verb\n- Join repeated messages into one durable paragraph record\n- Reject piped lifecycle stdin before any mutation\n- Remove summary input with a direct message migration hint\n- Keep result evidence path-based and atomically validated\n- Print each lifecycle postcondition in concise text\n- Cover messages, results, no-ops, and invalid input\n- Mark the lifecycle-command backlog task complete",
          "is_bot": false,
          "headline": "Make lifecycle messages explicit",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T20:49:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "363b48c8ce6325e53a432a755b368aeb6407b129",
          "body": "- Register unsequence as the inverse of sequence\n- Apply adjacent chain changes atomically\n- Skip existing and absent edges without redundant events\n- Report changed dependency relationships in plain text\n- Reject legacy sequence rm with a direct migration hint\n- Cover chain output, no-ops, readiness, and rollback\n- Mark the dependency-command backlog task complete",
          "is_bot": false,
          "headline": "Add symmetric dependency commands",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T20:45:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e55059ba4b14539ba6a9b52643f2e48e0bbbcc4",
          "body": "- Add append-only lifecycle message events and task state\n- Replay messages newest-first with exact text and timestamps\n- Preserve message history during event-log compaction\n- Support atomic message writes in shared task mutations\n- Reject lifecycle messages on containers and invalid kinds\n- Extend round-trip and validation coverage for messages\n- Mark the message-model backlog task complete",
          "is_bot": false,
          "headline": "Add durable lifecycle messages",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T20:41:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e5d9e32d17b0cb269055c922f37bd1223342316",
          "body": "- Accept lifecycle message and output revisions\n- Remove summary flags from the planned command surface\n- Preserve distinct summaries found in legacy result events\n- Require fixed-position task IDs in claim output\n- Strengthen readable result and conformance coverage\n- Keep manual review as the pre-release approval gate",
          "is_bot": false,
          "headline": "Refine the Ergo 3.0 backlog",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T20:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22c2cb9739284495cce99e05dade8cde1b8ad5ef",
          "body": "- Remove the global JSON output contract from the v3 design\n- Keep JSON only for creation input and the event log\n- Define readable list, show, claim, and mutation responses\n- Add an ordered task for the single-output-mode cutover\n- Make help and quickstart review a measured release gate\n- Cancel the obsolete no-ready JSON contract ticket\n- Preserve lifecycle, dependency, legacy-plan, and release coverage",
          "is_bot": false,
          "headline": "Replan Ergo 3.0 around agent-readable output",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T19:52:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be430a16922dd3b42b480ac367db2bc5e734a84e",
          "body": "- Define append-only lifecycle messages and sole body ownership.\n- Replace sequence rm with symmetric unsequence chains.\n- Preserve v2 log readability without compatibility aliases.\n- Reuse existing conformance and manual-surface tickets.\n- Order model, CLI, tests, documentation, and release work.\n- Keep message storage and dependency work parallel.\n- Add an explicit approval gate before publishing v3.0.0.\n- Cancel obsolete lifecycle body-replacement coverage.",
          "is_bot": false,
          "headline": "Plan the Ergo 3.0 command cutover",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-22T19:35:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c12e23b77cea958623c168b0184168e77bc5533",
          "body": "- Record the manual refinements since v2.0.0.\n- Clarify cold-start help and quickstart behavior.\n- Document safer multiline stdin guidance.\n- Correct the claimed completion JSON example.\n- Update changelog comparison links for v2.0.1.",
          "is_bot": false,
          "headline": "Prepare the 2.0.1 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T04:10:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee2a9b5ce53e4c35bb6b5a2b796914db69773338",
          "body": "- Put the task model and readiness rule before operations.\n- Add a conventional usage line and exact cold-start agent loop.\n- Explain lifecycle exits by present intent.\n- Clarify specific claim behavior and container compatibility naming.\n- Correct the claimed-task completion JSON response.\n- Add terminal-safe guidance for multiline body input.\n- Consolidate legacy, placement, and invariant guidance.\n- Keep both manuals complete without increasing their source length.",
          "is_bot": false,
          "headline": "Refine the v2 agent manuals",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T04:04:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ee99f0a9102237fe4e0537d54468cfc3ee9ec6f",
          "body": "- Correct the claimed-task completion JSON example\n- Add an intent-first lifecycle exit guide\n- Clarify specific claim readiness behavior\n- Explain the retained epic input naming\n- Consolidate repeated compatibility and invariant guidance\n- Require source-built example validation",
          "is_bot": false,
          "headline": "Track v2 manual refinements",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T03:45:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8850a28b4faa4a55d246e56383fe81538183c706",
          "body": "- Capture the immutable tag and successful release workflow\n- Record the verified six-archive checksum set\n- Note the concise published upgrade notes\n- Record the Homebrew formula-to-cask migration fix\n- Capture installed-binary lifecycle and legacy-log evidence\n- Close the publication task and release epic",
          "is_bot": false,
          "headline": "Record the completed v2.0.0 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T03:41:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18b629f3525756adb109a4f9a23ad1553890e6d9",
          "body": "- Add lifecycle metadata flag coverage as independent work\n- Add the oldest-ready empty JSON contract regression\n- Add canonical manual surface drift coverage\n- Add cleanup of obsolete set terminology in tests\n- Keep the follow-ups independent and ready for parallel work\n- Record ownership of the approved v2 publication task",
          "is_bot": false,
          "headline": "Track v2 test follow-ups",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T03:32:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3fb64e162a98c75a957560101468f10aa3fe715",
          "body": "- Record the validated release-content commit and CI run\n- Capture the six-platform snapshot artifact inventory\n- Document candidate lifecycle and JSON smoke coverage\n- Record legacy events compaction and normalization evidence\n- Note the Homebrew token and explicit tag approval prerequisites\n- Make the publish-and-verify task ready",
          "is_bot": false,
          "headline": "Complete v2 release preparation",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T01:35:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "199831010b5d6172db3c99844b245de734c4060f",
          "body": "- Document every breaking command and state-machine change\n- Map routine v1 set operations to the direct v2 verbs\n- Describe legacy plans and events compatibility\n- Migrate GoReleaser from formulas to Homebrew casks\n- Preserve unsigned macOS binary installation behavior\n- Record ownership of the release-preparation task",
          "is_bot": false,
          "headline": "Prepare the v2.0.0 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T01:33:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea8c29967f72c08bb49f35680e8fd2df39bcbebf",
          "body": "- Trigger on multi-commit, cross-concern, dependency-ordered work.\n- Preserve decision-first planning and smaller-model task shaping.\n- Show direct v2 planning, claim, completion, block, release, and cancel commands.\n- Distinguish body notes from concrete result files and summaries.\n- Preserve the removal of blanket mutation serialization and special plan commits.\n- Validate the skill and exercise its commands in a disposable graph.",
          "is_bot": false,
          "headline": "Teach the planning skill the v2 workflow",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T01:27:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdcb3556385797cec1121ecff8e31a16e911bdec",
          "body": "- Make help a compact reference for every v2 command and flag.\n- Make quickstart the complete example-led agent manual.\n- Fold the accepted behavior into one stable public spec.\n- Retire the superseded command-vocabulary proposal.\n- Align architecture, release guidance, README, and shipped hooks.\n- Verify documented command families against a source-built binary.",
          "is_bot": false,
          "headline": "Publish the complete v2 manuals",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T01:20:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e5c3fcc16b63c0130158d87f8ad3b219d46006e",
          "body": "- Cover legacy normalization through both event log filenames.\n- Require actionable usage for malformed mutation commands.\n- Verify result hashes and file URLs through show output.\n- Lock removed set and reopen calls to corrective hints.\n- Preserve claim resumption and duplicate-task regressions.\n- Run the full race-enabled CI parity suite.",
          "is_bot": false,
          "headline": "Prove the v2 CLI contract",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T01:12:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ab4806e0b668f3ae367e75bc16624700fcd8a2c",
          "body": "- Remove the public set command and its generic mutation parser.\n- Reject new legacy error states while preserving replay support.\n- Route old set and guessed reopen calls to direct-command hints.\n- Reject unexpected arguments on parent and reference commands.\n- Keep embedded help and fixture scripts on live v2 commands.\n- Remove temporary v1 transition compatibility from the mutation core.",
          "is_bot": false,
          "headline": "Cut over to the v2 command surface",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T01:09:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59fc316e25167edf1a5c1e54f30dbff2aa42e0e0",
          "body": "- Move leaf tasks into containers or back to root.\n- Promote only clean unclaimed root todo destinations.\n- Reject container moves, nesting, self moves, and missing targets.\n- Protect dependency ancestry in both edge directions.\n- Make same-parent placement an event-free no-op.\n- Verify successful and rejected moves through the source CLI.",
          "is_bot": false,
          "headline": "Add explicit task moves",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T01:00:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d66aba5702d7d455a773ec28f75c86b73f34c1ad",
          "body": "- Add focused title replacement for tasks and containers.\n- Read body replacements literally from piped stdin.\n- Support empty pipes as an explicit body clear.\n- Reject interactive body input with a working pipe example.\n- Suppress same-value content events and report true no-ops.\n- Exercise both commands through the compiled CLI.",
          "is_bot": false,
          "headline": "Add direct title and body commands",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T00:55:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82d4665212502b0f3c5ffe28d6b1f576609450c4",
          "body": "- Resume blocked, done, canceled, and legacy error tasks by ID.\n- Keep oldest-ready selection limited to unclaimed todo work.\n- Make repeated owner claims no-ops and reject competing owners.\n- Emit exact done, block, cancel, and release next commands.\n- Remove the one-path done reminder from claim output.\n- Verify resumed work keeps its original task identity.",
          "is_bot": false,
          "headline": "Make specific claims resumable",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T00:52:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e67b2904222639b3ba86505cd02dd20d26a338f",
          "body": "- Add done, block, cancel, and release command routes.\n- Apply lifecycle body, result, state, and claim changes atomically.\n- Restrict release to unfinished and legacy error states.\n- Return stable JSON with fields that actually changed.\n- Cover all readable source states and late result attachment.\n- Keep embedded manuals functional during the staged cutover.",
          "is_bot": false,
          "headline": "Add direct lifecycle commands",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T00:48:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9763f09023fc1ab24eaf4a76739208cbed5bcc1f",
          "body": "- Cover legacy events.jsonl replay without repository migration.\n- Preserve error and claimed-blocked states through compaction.\n- Verify readiness and container derivation on old logs.\n- Exercise explicit lifecycle normalization of legacy claims.\n- Prove events from older writers remain replayable.",
          "is_bot": false,
          "headline": "Preserve legacy plans through v2",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T00:45:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df6f95008d70051d56c4de32e36f314a8ec030df",
          "body": "- Replace the fixed v2 state model with direct postconditions.\n- Centralize body, result, state, and claim writes under one lock.\n- Enforce claims exactly for doing tasks on forward writes.\n- Isolate temporary v1 set transition compatibility until cutover.\n- Verify mixed batches and validation rollback with focused tests.",
          "is_bot": false,
          "headline": "Refactor lifecycle mutations around postconditions",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T00:43:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f408034866344beb4e2375fc105d75c48450c0fa",
          "body": "- Define the model-idiomatic command vocabulary.\n- Make lifecycle postconditions and claim invariants explicit.\n- Specify JSON mutation output and idempotent retries.\n- Preserve legacy error and claimed-blocked states losslessly.\n- Record the accepted contract in the implementation epic.",
          "is_bot": false,
          "headline": "Accept the v2 command contract",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-21T00:33:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7476310ae42dcc7f16e85d7722b853677621c1c4",
          "body": "- Add a tracked container for Windows distribution work\n- Add blocking native Windows CI coverage as ready work\n- Define GoReleaser WinGet pull request automation\n- Record the Sandover.Ergo package identity decision\n- Sequence external bootstrap after CI and release configuration\n- Add public catalog verification and README follow-up gates",
          "is_bot": false,
          "headline": "Plan verified Windows distribution",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-19T00:16:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "233b2ac7afa91352c85717882bc1f723d0220699",
          "body": "- Replace unsupported mapfile calls with indexed-array reads\n- Keep strict unset-variable checks enabled\n- Handle an empty staged-file list without failing\n- Preserve filenames containing spaces during formatting\n- Retain staged Go formatting and quick-test behavior\n- Verify the repaired hook through the real commit path",
          "is_bot": false,
          "headline": "Make pre-commit hook portable to macOS Bash",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-19T00:06:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66594225a19b15d131dfaffa1a7ae34e315d25b0",
          "body": "- Add native Windows availability to the changelog\n- List AMD64 and ARM64 ZIP release artifacts\n- Document the Windows go install path\n- Describe portable locking, storage, and path handling\n- Preserve compatibility expectations for existing platforms\n- Advance the changelog comparison links to v1.2.0",
          "is_bot": false,
          "headline": "Prepare 1.2.0 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-19T00:03:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa3256656ef4515730a21438892269867def9cdb",
          "body": "Add native Windows support",
          "is_bot": false,
          "headline": "Merge pull request #9 from sandover/fix/windows-file-locking",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-18T23:50:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64500bec487220b427a397899b16e4b8881e79af",
          "body": null,
          "is_bot": false,
          "headline": "Add native Windows support",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-17T20:40:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d70bcffa82cf1db794cef42692f26cdd400dda6",
          "body": "- Add human-readable 1.1.0 release notes\n\n- Describe parallel-agent handling in user-facing terms\n\n- Call out race-safe claiming and consistent reads\n\n- Note that existing workflows and JSON output shapes remain compatible\n\n- Update changelog compare links for the new tag",
          "is_bot": false,
          "headline": "Prepare 1.1.0 release",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-08T15:02:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "939dcaa79212731be42fe81b1b83f64cb7d0cb12",
          "body": "- Remove the public lock-timeout flag and related option plumbing\n\n- Replace lock-holder metadata with a fixed internal bounded wait\n\n- Keep reads and writes on the same simple lock path\n\n- Trim tests that only covered removed timeout and diagnostics behavior\n\n- Update help, quickstart, README, spec, and architecture docs\n\n- Refresh the Ergo plan notes to match the final shipped design",
          "is_bot": false,
          "headline": "Simplify lock contention behavior",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-08T15:02:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce5271191e8716306d39cadd77017d80bda03b0d",
          "body": "- Add bounded lock waits with --lock-timeout and fail-fast opt-in\n- Apply create, set, claim, and sequence mutations as single locked batches\n- Read list and show snapshots under the same bounded lock policy\n- Record best-effort lock holder metadata for timeout diagnostics\n- Add contention tests for waiting, fail-fast mode, racing claims, and mixed commands\n- Update help, quickstart, spec, architecture, and README for the new concurrency contract\n- Mark the parallel contention Ergo epic complete",
          "is_bot": false,
          "headline": "Harden lock contention handling",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-07-07T23:08:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18bb4972505872826f012fbbd014a2e70dc0c4fb",
          "body": null,
          "is_bot": false,
          "headline": "Tighten 1.0.0 changelog entry",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-22T23:42:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c3c762d3323c1677435b7c81b0a8e51233effc9",
          "body": null,
          "is_bot": false,
          "headline": "Remove creack/pty dependency (unused after runErgoWithPTY removal)",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-22T23:26:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9ccb87ba51497d0708c8476b933c0c3d89444b6",
          "body": null,
          "is_bot": false,
          "headline": "Merge v0.12-unify-model: unified container model, simplified CLI, 1.0.0",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-22T23:26:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6597902a4742be8431d89349f47b619023e6250a",
          "body": "- Drop show --short flag: terse tab-delimited output rarely needed; agents use --json show\n- Drop claim --epic filtering: removes RunClaimOldestReady epicID param, readyTasks epicID param, and the --epic flag from claimCmd\n- Delete TestRunClaimOldestReady_EpicFilter and fix remaining call site\n- Rew\n[…]\nction, punchier RULES\n- Update quickstart.txt: remove --short and --epic examples\n- Add ergo-draft.md to .gitignore\n- Update CHANGELOG [1.0.0] with flag removals and new --help; set date to 2026-05-22",
          "is_bot": false,
          "headline": "Remove show --short and claim --epic; revise --help voice",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-22T23:24:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c7541741748054daf59c37ffe1fd7ccb6190e74c",
          "body": "- add the local ergo epic for the CLI cutover and its child tasks\n- capture the goal, acceptance criteria, and validation gates for each work item\n- record the dependency edges between routing, input, compatibility, docs, and coverage tasks\n- mark the completed implementation tasks as done once the work landed\n- close the final polish task after settling on the 1.0.0 release target and finishing validation",
          "is_bot": false,
          "headline": "Record CLI cutover plan progress",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-21T23:26:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a229ad7bbbddfeb443b15bd55ed15489029c99ae",
          "body": "- rewrite help and quickstart around the new task, set, and plan workflow\n- align README and spec examples with inline JSON plus stdin-body semantics\n- update the changelog and release guide for the 1.0 release target\n- switch sample-project fixture scripts to the forward CLI contract\n- refresh the planning skill guidance to use the current result field\n- delete the stale plan proposal now that the shipped manuals are authoritative",
          "is_bot": false,
          "headline": "Update docs and fixtures for ergo 1.0",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-21T23:25:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5de7f6ed6cbe858ca2854bb70b4d3313353ea908",
          "body": "- replace the old stdin JSON mutation path with explicit inline-JSON parsing helpers\n- wire new task, set, and plan to the forward command contract\n- parse plan files as markdown chunks and simplify the bulk-create path\n- remove obsolete body-stdin and legacy CLI plumbing that no longer drives behavior\n- shrink shared JSON validation down to the helpers still used by the new surface\n- update integration coverage to exercise the explicit current-contract helpers",
          "is_bot": false,
          "headline": "Refactor CLI input around inline JSON",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-21T23:25:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfe3a06d24cf9c185c7f44e353e26323f59b4f52",
          "body": "- make removed `new epic` fail cleanly instead of falling through to parent help\n\n- wire `new task` result flags so the CLI matches the embedded manual\n\n- write unified `new_task` events for normal and bulk creation paths\n\n- preserve legacy empty-container markers during compact for read compatibili\n[…]\nc` as the parent-assignment flag\n\n- extend integration coverage for removed-command behavior and bulk-create event output\n\n- verified with `go test ./...` and CLI smoke checks for removed surface area",
          "is_bot": false,
          "headline": "Align v0.12 container model across CLI and docs",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-20T19:44:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f6da14e35c2b17a3c18b8357146b1bd5ff6a0c4",
          "body": "- Add container promotion guard rejecting first-child assignment to\n  claimed, non-todo, or results-attached leaf (PMY5QR)\n- Introduce isDepComplete() helper; rewrite isReady/isBlocked to handle\n  both leaf and container deps; add inherited-parent-dep propagation;\n  delete areEpicDepsComplete (2ZYNN\n[…]\n Replace TestPlan_* with TestBulkCreate_* using new output schema\n- Mark historical-proposal callout in docs/proposal-ergo-plan.md\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "v0.12 follow-up: correctness and minimalism",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-20T19:19:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7a96d2f1dbb8cb00235bf71d99a68311a3c99ba2",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "plan: complete v0.12 unify-model epic",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-20T15:44:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8da604a2e1a861adcce4b850bc05ef3346494d0b",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add CHANGELOG for v0.12.0",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-20T15:43:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8d29a27eda9c4565b5b23fdb72080889deea3d9d",
          "body": "- Delete commands_plan.go (RunPlan no longer wired)\n- Delete commands_plan_test.go and plan_input_test.go\n- Trim plan_input.go to only PlanTaskInput + hasPlanCycle\n- Fix json_input_test.go reference to removed constant\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Remove dead plan command code",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-20T15:43:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "15523231d4f20ac4a077aed4d3569d29b3299c5f",
          "body": "- help.txt: remove new epic/plan commands, add tasks:[...] docs\n- quickstart.txt: rewrite §4/§4d for bulk create, §9 for containers\n- README.md: update planning example to show both bulk and incremental\n- docs/spec.md: update input contracts and list flag docs\n- skills/SKILL.md: epics → containers terminology\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Rewrite docs for unified container model",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-20T15:41:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "354dea9a5c058aab5aa51da3ea6ec336ac9ecc24",
          "body": "- Remove Kind type; containers are derived from has-children status\n- Replace validateDepKinds with validateDepAncestry (relaxed dep rules)\n- Remove `new epic` and `plan` subcommands\n- Add bulk creation via `tasks:[...]` in `new task` JSON input\n- Rename --epics flag to --containers in list command\n\n[…]\no new task\n- Update all integration tests for new API surface\n- applyContainerDerivation runs post-replay to set IsEpic on parents\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Unify task/epic model and simplify CLI surface",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-20T15:37:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0af47e5a0ff83bbf944f6a3b92ef0ae2c0952f0",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(release): prepare v0.11.2",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-18T20:35:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f3e6969e12ce0bc75c4fd9d23002fe3b9ec5ec2a",
          "body": "- Lead with 3-line mental model (data shape, ID format, I/O pattern)\n- Add worked lifecycle example before the command reference\n- Show --body-stdin inline with examples, not buried in prose\n- Trim command descriptions to one line each (quickstart has detail)\n- Replace FOR AGENTS section with 2-line\n[…]\nonly)\n- Rename \"COMMON FLAGS\" to \"FLAGS FOR new/set\" for clarity\n- Remove redundant multi-line descriptions under list/claim/prune\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs(help): redesign --help for cold-start model comprehension",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-18T20:34:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b539c3d20cf2ef1c383134fb8a5597af33567d21",
          "body": "- add an explicit bootstrap rule to keep ergo work in the main agent\n- discourage subagent-driven ergo planning and concurrent ergo mutations\n- explain that shared plan state is easier to reason about with one owner\n- keep the change scoped to the repo-local ergo-feature-planning skill text\n- leave the rest of the repo untouched",
          "is_bot": false,
          "headline": "Clarify sequential ergo usage",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-18T20:03:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f43a29cf0e20d4fdc82075c5a847e7ff09ad43a",
          "body": "Move adjacent-swap typo detection into the shared JSON field suggestion helper.\n\nKeep ergo plan unknown-field handling on the same shared path as other JSON inputs.\n\nRemove the redundant plan-specific suggestion helper and its duplicate swap check.\n\nPreserve the nested plan typo behavior where aftre\n[…]\ne for a single adjacent swap.\n\nAdd an ambiguity case so competing adjacent-swap matches stay rejected.\n\nNo command syntax or storage behavior changes.\n\nValidation: go test ./internal/ergo and task ci.",
          "is_bot": false,
          "headline": "fix(json): share adjacent-swap field suggestions",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-07T16:55:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "31156fa20b526c8c83d90de85ac6f86ca6feec8e",
          "body": "Add the ergo feature planning skill directly to this repository.\n\nPoint the README at the repo-local skill path instead of the external codex-skills copy.\n\nKeep the CLI manuals unchanged because this is agent setup guidance, not command reference behavior.\n\nThe bundled skill preserves the planning/e\n[…]\nl or reference the skill from their agent setup.\n\nNo code paths or command behavior changed.\n\nValidation is limited to diff and link inspection because the change is documentation and skill text only.",
          "is_bot": false,
          "headline": "docs: bundle ergo planning skill",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-05-07T16:44:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "42aee3f3507764ee75c6e3be2cdcf525deb362c0",
          "body": "Rewrite the v0.11.0 changelog entry in plain, user-facing language.\nEmphasize practical outcomes over internal implementation details.\nClarify what `ergo plan` adds and why it improves daily workflow.\nRetain compatibility guarantees and strict parsing expectations.\nKeep reliability improvements expl\n[…]\nON behavior for agents.\nCondense test coverage details into one clear quality summary.\nAlign local changelog wording with published GitHub release notes.\nRisk: none; wording-only documentation update.",
          "is_bot": false,
          "headline": "docs(changelog): make v0.11.0 release notes human-friendly",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-03-02T00:45:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4083b5f900f5e11625ec661739707e029c043622",
          "body": "Rewrite the v0.11.1 changelog entry in plain user-facing language.\nFocus on what changed, why it helps, and compatibility guarantees.\nReduce parser-internals jargon that is noisy for most readers.\nKeep the substantive behavior unchanged from the shipped release.\nHighlight top-level vs nested typo-hi\n[…]\n rejection is still enforced.\nRetain explicit compatibility and test-coverage notes.\nThis commit aligns repo changelog tone with the edited GitHub release page.\nRisk: none; documentation wording only.",
          "is_bot": false,
          "headline": "docs(changelog): make v0.11.1 release notes human-friendly",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-03-02T00:43:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95b8cf343a23f1bca2630523f13bc274b00ae8b4",
          "body": "Cut a patch release for scoped `ergo plan` suggestion improvements.\nDocumented the user-visible parsing behavior change in CHANGELOG.\nTop-level unknown fields stay constrained to top-level suggestions.\nNested task typos now receive task-level suggestions including `after`.\nThis release keeps the str\n[…]\n regression-test coverage note for both scope paths.\nNo command/flag surface changes and no migration impact.\nPre-flight validation passed with `task ci` (tidy, lint, race tests).\nTag target: v0.11.1.",
          "is_bot": false,
          "headline": "chore(release): prepare v0.11.1",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-03-02T00:39:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2c1e913563470bae9ab60d555556da5568e3ddd6",
          "body": "Improve unknown-field suggestion quality for `ergo plan` payload parsing.\nTop-level typos still suggest only top-level fields (`title`, `body`, `tasks`).\nNested task typos can now suggest task fields including `after`.\nThe parser now infers unknown-field scope from raw JSON key locations.\nA narrow a\n[…]\nage for scope detection and nested/top-level suggestion behavior.\nValidation: go test ./internal/ergo -run 'DetectPlanUnknownFieldScope|SuggestPlanFieldName|ParsePlanInput|PlanInput' and go test ./...",
          "is_bot": false,
          "headline": "fix(plan): add scope-aware unknown-field suggestions",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-03-02T00:38:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0b79022e65f856908f2fca04ab28618bfd991243",
          "body": "Clarify why unknown-field suggestions are limited to top-level plan keys.\nRename the nested-field parse test to match observed behavior.\nDocument the decoder limitation: pathless unknown-field errors.\nThis keeps user-facing hints honest and avoids impossible suggestions.\nWithout this note, future re\n[…]\nnged in plan parsing.\nConstraint: suggestion candidates remain top-level keys only.\nTests: go test ./internal/ergo -run 'ParsePlanInput|PlanInput'.\nRisk: low; updates are comment and test naming only.",
          "is_bot": false,
          "headline": "chore(plan): document top-level suggestion scope",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-28T23:27:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2ad1ea04ff2f764b23cf421a32b015f653a1bed6",
          "body": "fix(plan): avoid impossible top-level field suggestions",
          "is_bot": false,
          "headline": "Merge pull request #3 from sandover/fix/plan-top-level-suggestions",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-28T23:25:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4275bdf35582f3aaa44241f16302c4c9caf60809",
          "body": "Constrain `ergo plan` unknown-field suggestions to top-level schema keys only.\\nThis prevents suggesting `after` for unknown top-level keys, which is misleading because `after` is task-scoped only.\\nRename the candidate list to clarify intent and preserve existing parser behavior.\\nAdd a focused reg\n[…]\nfeedback aligned with quickstart/spec input shape and reduces correction loops for agents.\\nRisk is low: change is scoped to suggestion candidate selection for plan parsing only.\\nTests: go test ./...",
          "is_bot": false,
          "headline": "fix(plan): avoid impossible top-level field suggestions",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-28T17:03:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6df931c630ac7f947c7a25dd9a68eb29d8a80bdf",
          "body": "Cut v0.11.0 as a minor release for the new atomic \\ workflow.\\nAdd a full changelog entry covering command behavior, JSON contract, validation semantics, docs, and tests.\\nBackfill missing v0.10.3 changelog section so version history is coherent and linkable.\\nUpdate changelog compare links so Unrel\n[…]\nver/ergo/internal/ergo\t(cached)) and passed.\\nNo breaking JSON shape changes were introduced in this release line.\\nThis commit is release-prep only; feature implementation shipped in prior commit(s).",
          "is_bot": false,
          "headline": "chore(release): prepare v0.11.0",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-28T16:37:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b2e2a04deb32a7e99b9100341877b6a33dd8217",
          "body": "Add a new \\ command to create an epic, tasks, and dependencies from one JSON document.\\nImplement strict plan parsing/validation with clear parse_error vs validation_failed behavior.\\nPreserve existing dependency semantics where from_id depends on to_id and reuse existing event types.\\nAdd transacti\n[…]\nnUpdate help, quickstart, spec, and proposal docs to match implemented v1 scope and contracts.\\nKeep existing commands backward compatible; plan behavior is additive and isolated from prior workflows.",
          "is_bot": false,
          "headline": "feat(plan): add atomic ergo plan command",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-28T16:26:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e4e20be401e82f3e0860b5b63ca2cb204918380",
          "body": "Fix the Step 2 quoted instruction typo (missing closing quote).\nAdd an optional link to the ergo-feature-planning skill for richer agent plans.\n\nConstraints:\n- README-only change; no behavior changes.\n- Keeps install instructions intact (origin/main already corrected the go install path).\n\nTests: not run (docs-only).",
          "is_bot": false,
          "headline": "docs: improve README agent setup guidance",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-24T00:46:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c96cd51229edd155678333814e6759bbb86b5267",
          "body": "fix: correct go install path in README",
          "is_bot": false,
          "headline": "Merge pull request #2 from sandover/claude/fix-ergo-install-path-Vq1qT",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-20T21:42:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7f9fd9e75817382623136a80da9513867566c3c",
          "body": "The main package lives at cmd/ergo/, not the module root, so\n`go install github.com/sandover/ergo@latest` fails with\n\"does not contain package\". Updated to the correct path:\n`go install github.com/sandover/ergo/cmd/ergo@latest`\n\nhttps://claude.ai/code/session_01ArzmSRMDHpxMHKLVWs7pqd",
          "is_bot": false,
          "headline": "fix: correct go install path in README",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-02-20T21:39:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b438ea0d753321b97ce9ca20bb116e7484dd6d5",
          "body": "Reworked human `ergo show` output to emit legal Markdown documents.\n\nAdded SKILL.md-style YAML front matter for both task and epic views.\n\nTask output now renders heading, body, and Results as Markdown list links.\n\nEpic output now prioritizes epic body and includes child task bodies in order.\n\nChild\n[…]\nrgo/help.txt and internal/ergo/quickstart.txt.\n\nRemoved glamour and now-unused relativeTime helper to reduce dependencies/cruft.\n\nValidation: task ci (go mod tidy, golangci-lint, go test -race ./...).",
          "is_bot": false,
          "headline": "feat(show): make human show output markdown-first",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-18T02:15:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36cacaaa342db9c8093d96187d3ec58f8ffd9bef",
          "body": "Documented 0.10.2 as a patch release with dense show-header metadata formatting fixes.\n\nAdded release notes for the task-show header compaction and associated regression coverage.\n\nUpdated compare links so Unreleased now starts after v0.10.2.\n\nIncluded a minimal integration-test lint cleanup discove\n[…]\ncommands, or JSON schema changes were introduced.\n\nSemVer remains patch because behavior is a formatting fix without API breakage.\n\nRelease preflight validated via task ci (tidy, lint, go test -race).",
          "is_bot": false,
          "headline": "chore(release): prepare v0.10.2",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-18T01:46:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63f03c8d65f8e50f431bf1bd8a1def9de3589a05",
          "body": "Removed extra blank spacer lines in task show metadata blocks.\n\nTask headers now render as a compact sequence: separator, epic/claim, created/updated, deps/results, separator.\n\nThis aligns output with the intended dense style for human scanning.\n\nKept field ordering and content unchanged so no contr\n[…]\n layout boundaries.\n\nNo JSON output paths were modified.\n\nValidation: go test ./cmd/ergo -run TestShowTaskHeaderDense and go test ./...\n\nScope intentionally minimal to avoid unrelated rendering churn.",
          "is_bot": false,
          "headline": "fix(show): make task metadata header dense",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-18T01:43:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6919aabae6b6980d1a6dac289f37502a7d3552a3",
          "body": "Documented the 0.10.1 patch release in CHANGELOG.md under Keep a Changelog sections.\n\nCaptured user-visible epic show improvements from RQCKJ2 document-first layout work.\n\nCaptured child ordering bugfix from ZQIKHM so show ordering matches list dependency semantics.\n\nCaptured quickstart discoverabil\n[…]\nOperational guidance and agent-oriented docs stay aligned with shipped behavior.\n\nPreflight validation run: task ci (tidy, lint, go test -race).\n\nReady to cut tag v0.10.1 for CI/Goreleaser publishing.",
          "is_bot": false,
          "headline": "chore(release): prepare v0.10.1 changelog",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-18T01:36:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f185df99fda83d9ab0bf140799f79d7249d92255",
          "body": "Reworked human show for epic IDs to lead with the epic document, then compact child rows, then a dim metadata footer.\n\nSwitched epic child collection from ID sort to topological dependency order so show output matches list ordering semantics.\n\nKept show for task IDs behavior unchanged and preserved \n[…]\nparator and markdown body rendering paths.\n\nConstraints preserved: no new flags or subcommands; reuse existing icons, colors, blocker annotations, and ID alignment behavior.\n\nValidation: go test ./...",
          "is_bot": false,
          "headline": "feat(show): make epic show document-first and dependency-ordered",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-18T01:33:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "500e297bca65b333f7b6303365d7883925398826",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-16T17:14:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7c10927c61a367fe8406f4934beb23bb12e3856",
          "body": "Cut the 0.10.0 release notes from the Unreleased section.\n\nDocument the storage rename from events.jsonl to plans.jsonl.\n\nCall out backward compatibility for existing .ergo/events.jsonl repos.\n\nRecord that new repos default to .ergo/plans.jsonl via init.\n\nUpdate compare links so changelog navigation\n[…]\n v0.10.0.\n\nKeep all changes constrained to changelog metadata only.\n\nPre-flight gates passed locally via task ci and build smoke checks.\n\nNo runtime behavior changes introduced by this release commit.",
          "is_bot": false,
          "headline": "chore(release): v0.10.0",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-16T17:13:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "098c4fb6c0c5d2e81a3e901c905a9f56d9040664",
          "body": "…fM5'",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/claude/rename-events-to-plans-Dv…",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-16T17:10:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a9b086d52a6a23d99601a72742e5c8bbfd1bdf6",
          "body": "feat: rename events.jsonl to plans.jsonl with backwards compatibility",
          "is_bot": false,
          "headline": "Merge pull request #1 from sandover/claude/rename-events-to-plans-DvfM5",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-14T15:35:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b18ff255c68c98b0deec68a371b0fc744704edd",
          "body": "- New repos initialized with `ergo init` now use `plans.jsonl`\n- Existing repos with `events.jsonl` continue to work seamlessly\n- Added getEventsPath() helper that prefers plans.jsonl, falls back to events.jsonl\n- Updated all event log references throughout codebase\n- Updated documentation (README, architecture.md, CHANGELOG, pre-commit hook)\n- Added comprehensive backwards compatibility tests\n- All tests passing\n\nhttps://claude.ai/code/session_01Nib7aACtqjiZTKmuxBguyu",
          "is_bot": false,
          "headline": "feat: rename events.jsonl to plans.jsonl with backwards compatibility",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-02-14T14:40:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "931c9e2709dd8ac49ce610f6796a0b52cefeb420",
          "body": "Adopt repository-level AGENTS as a thin overlay over global policy.\nReference /Users/brandonharvey/AGENTS.md as canonical shared instructions.\nRetain only repository-specific deltas in local AGENTS.md.\nAdd CLAUDE.md symlink to AGENTS.md for Claude-compatible discovery.\nKeep the change scoped to instruction files only.\nDo not alter build, runtime, or source behavior.\nThis reduces duplicated guidance and maintenance drift across active repos.\nNo tests required for this metadata-only change.",
          "is_bot": false,
          "headline": "chore(agents): align repo instructions with global policy",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-11T19:34:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1abe6d701b0ebc21ee5c3cb7acf39becfdba063",
          "body": "Collapse show output metadata by moving state into the header line.\n\nReplace separate state row with an ID-adjacent [state] pill for faster scanability.\n\nKeep icon and state color mapping intact in TTY mode to preserve visual semantics.\n\nRetain plain-text parity in non-TTY mode via explicit brackete\n[…]\nds (epic, claim, deps, rdeps, results) unchanged.\n\nRisk is limited to human-readable layout; integration behavior remains stable.\n\nValidation: go test ./internal/ergo and go test ./cmd/ergo both pass.",
          "is_bot": false,
          "headline": "refactor(show): move state into header pill",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-06T02:06:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "25c0e955fc92a6a50b816747ddb6a5b92300ea8b",
          "body": null,
          "is_bot": false,
          "headline": "tiny edit",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-05T22:09:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8bc39610a0c6f333ea50ab7f58c39055c86deda",
          "body": null,
          "is_bot": false,
          "headline": "README edit",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-05T22:04:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b996a7eb5f5ebf6b7b83d7c39876f62510c5ec9",
          "body": null,
          "is_bot": false,
          "headline": "updated git hooks",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-05T21:51:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ed3d2cb95945b4f77d9909f5f1af6a3c93d0f05",
          "body": null,
          "is_bot": false,
          "headline": "README edits",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-05T21:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24ca77076c13862a7dc8addc986342d4185d5a81",
          "body": "Race adds significant overhead and caused flaky perf guard failures.\nSkip perf regression tests when built with -race while keeping\nthresholds unchanged for standard CI and local runs.\nAdd build-tag helpers to detect race mode in tests.\nUpdate 0.9.3 changelog entries to reflect recent fixes and docs.\nConstraints: perf guards must still run in non-race builds.\nRisks: performance regressions may slip past race-only checks.\nTests: go mod tidy; golangci-lint --timeout 5m ./...; go test -race ./...",
          "is_bot": false,
          "headline": "test(perf): skip perf guards under race",
          "author_name": "Brandon Harvey",
          "author_login": "sandover",
          "committed_at": "2026-02-05T19:44:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 44,
      "commits_last_year": 235,
      "latest_release_at": "2026-07-26T18:07:00Z",
      "latest_release_tag": "v4.0.0",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 14,
      "days_since_latest_release": 1,
      "mean_days_between_releases": 16.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/sandover/ergo",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/sandover/ergo",
          "is_deprecated": false,
          "latest_version": "v1.2.0",
          "repository_url": "https://github.com/sandover/ergo",
          "versions_count": 40,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T00:03:18Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        }
      ]
    },
    "popularity": {
      "forks": 5,
      "stars": 38,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-02-16",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 1
          },
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 1
          },
          {
            "date": "2026-07-18",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 5,
        "total_forks": 5
      },
      "star_history": null,
      "open_issues_and_prs": 4
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Taskfile.yml"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 78739,
      "source_files_sampled": 55,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 935
    },
    "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/mattn/go-runewidth",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.16"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.40.0"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.39.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": 4,
        "open_issues": 4,
        "closed_ratio": 0.2,
        "closed_issues": 1,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "sandover",
          "commits": 233,
          "avatar_url": "https://avatars.githubusercontent.com/u/224739?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.991
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "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": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "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": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 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": "no SAST tool detected",
            "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": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "cb09d663e57a1a003055776e85062c69492f80cc",
        "ran_at": "2026-07-28T01:51:43Z",
        "aggregate_score": 3.8,
        "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-26T18:10:36Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-18T23:50:54Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 5,
          "created_at": "2026-03-26T23:28:16Z",
          "last_comment_at": "2026-03-30T19:28:00Z",
          "last_comment_author": "ToreAad"
        },
        {
          "number": 6,
          "created_at": "2026-06-10T19:46:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7,
          "created_at": "2026-06-12T18:25:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 8,
          "created_at": "2026-07-08T19:50:09Z",
          "last_comment_at": "2026-07-14T14:54:22Z",
          "last_comment_author": "jamestjat"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/sandover/ergo",
    "host": "github.com",
    "name": "ergo",
    "owner": "sandover"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 57,
      "inputs": {
        "security": 38,
        "vitality": 80,
        "community": 39,
        "governance": 48,
        "engineering": 72
      },
      "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": 74,
            "inputs": {
              "commits_last_year": 235,
              "human_commit_share": 1,
              "days_since_last_push": 1,
              "active_weeks_last_year": 14
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "14/52 weeks with commits",
                "points": 9.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "235 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 235
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 44,
              "latest_release_tag": "v4.0.0",
              "releases_from_tags": false,
              "days_since_latest_release": 1,
              "mean_days_between_releases": 16.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "44 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 44
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~16.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 16.5
                    }
                  }
                ],
                "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": 1,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 1 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 39,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 30,
            "inputs": {
              "forks": 5,
              "stars": 38,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "38 stars",
                "points": 25.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 38
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "5 forks",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 48,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 12,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.991
            },
            "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 99% of commits",
                "points": 0.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "merged_prs": 4,
              "open_issues": 4,
              "closed_issues": 1,
              "issue_closed_ratio": 0.2,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "20% of issues closed",
                "points": 9.3,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 20
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "4/4 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 4,
                      "decided": 4
                    }
                  }
                ],
                "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": 51,
            "inputs": {
              "followers": 16,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "sandover",
              "public_repos": 25,
              "account_age_days": 5976
            },
            "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": "16 followers of sandover",
                "points": 8.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 16,
                      "login": "sandover"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "25 public repos, account ~16 yr old",
                "points": 22.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 25
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/sandover/ergo"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 9
            },
            "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 9 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "40 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 40
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 72,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "beads-cli",
                "claude-code",
                "codex",
                "codex-cli",
                "planning"
              ],
              "has_wiki": false,
              "homepage": "https://github.com/sandover/ergo",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://github.com/sandover/ergo",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "5 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 38,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 38,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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 not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 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": "no SAST tool detected",
                "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": "1 existing vulnerabilities detected",
                "points": 6.8,
                "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": 81,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.82,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 935
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "82 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 82,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Taskfile.yml"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.08,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Taskfile.yml",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Taskfile.yml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "8 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 8,
                      "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": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 78739,
              "source_files_sampled": 55,
              "oversized_source_files": 1
            },
            "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": "1/55 source files over 60KB",
                "points": 54,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 55,
                      "oversized": 1
                    }
                  }
                ],
                "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T01:51:49.757351Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sandover/ergo.svg",
  "full_name": "sandover/ergo",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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