Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-27 11:34 UTC

gur-shatz / go-run

File-watching auto-rebuild & restart tools for Go and any language — execrun, and a multi-target orchestrator with web UI. Also helper packages

Go · HTMLMIT★ 0 estrellas⑂ 0 forksdesde feb 2026Ver en GitHub ↗

gur-shatz/go-run tiene un índice de salud de 41 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (80/100) y la más baja, Community & Adoption (24/100). Se actualizó por última vez hace 4 días. Una sola persona concentra la mayor parte del trabajo reciente.

41
global / 100
En riesgo

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

41
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

gur-shatzCuenta personal
0 seguidores4 repositorios públicosdesde jun 2018

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/gur-shatz/go-runv0.1.47-37hace 4 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 4 días
11.1/36Cadencia de commits — 16/52 semanas con commits
18/18Volumen de commits — 112 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_year112
human_commit_share1
days_since_last_push4
active_weeks_last_year16
Cómo se puntúa
16.2/27Publica versiones — 37 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 4 días
27/27Cadencia de publicación — una versión cada ~2,1 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count37
latest_release_tagv0.1.47
releases_from_tags
days_since_latest_release4
mean_days_between_releases2,1
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

24Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
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?

32En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de gur-shatz
17.1/25Trayectoria — 4 repos públicos, cuenta de ~8 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_logingur-shatz
public_repos4
account_age_days2961
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 4 días
20/20Historial de versiones — 37 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/gur-shatz/go-run
ecosystemsgo
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

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

38En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
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_cino
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

50Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dirno
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?

25Crítico · 16% del índice global
Cómo se puntúa
6.8/7.5Binary-Artifacts — binaries present in source code
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
0/10Dangerous-Workflow — sin datos
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
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — sin datos
0/7.5Vulnerabilities — 27 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,5
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. 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.

59Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
20.8/40Historial de commits legible — 39 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,39
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 36 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 — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,36
toolchain_manifestsexamples/backoffice-demo/go.mod, examples/hello-go/go.mod, examples/supervisor/hello/go.mod, examples/ticker/go.mod, go.mod
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/167 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes48.947
source_files_sampled167
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 2.5 / 10
2.5agregado

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-27 11:34 UTC

9Binary-Artifactsbinaries present in source code
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
n/dDangerous-Workflowno workflows found
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
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
0Vulnerabilities27 existing vulnerabilities detected
Dependencias directas 12
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/bmatcuk/doublestar/v4v4.10.0go.mod
Gogithub.com/fsnotify/fsnotifyv1.9.0go.mod
Gogithub.com/go-chi/chi/v5v5.2.5go.mod
Gogithub.com/go-playground/validator/v10v10.28.0go.mod
Gogithub.com/gur-shatz/statekitv0.0.23go.mod
Gogithub.com/mitchellh/mapstructurev1.5.0go.mod
Gogithub.com/onsi/ginkgo/v2v2.28.1go.mod
Gogithub.com/onsi/gomegav1.39.1go.mod
Gogolang.org/x/termv0.40.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gogithub.com/yuin/goldmarkv1.8.2go.mod
Gogithub.com/google/shlexv0.0.0-20191202100458-e7afc7fbc510go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 6196,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1073193,
        "HTML": 124123,
        "Shell": 6877,
        "Makefile": 8391
      },
      "pushed_at": "2026-07-22T20:05:06Z",
      "created_at": "2026-02-18T15:49:16Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T20:05:33Z",
      "description": "File-watching auto-rebuild & restart tools for Go and any language — execrun, and a multi-target orchestrator with web UI. Also helper packages",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "HTML"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "gur-shatz",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/40355698?v=4",
      "created_at": "2018-06-18T10:12:05Z",
      "is_verified": null,
      "public_repos": 4,
      "account_age_days": 2961
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.47",
          "kind": "patch",
          "published_at": "2026-07-22T19:56:14Z"
        },
        {
          "tag": "v0.1.46",
          "kind": "patch",
          "published_at": "2026-07-22T15:22:53Z"
        },
        {
          "tag": "v0.1.45",
          "kind": "patch",
          "published_at": "2026-07-22T15:14:23Z"
        },
        {
          "tag": "v0.1.44",
          "kind": "patch",
          "published_at": "2026-07-19T19:23:27Z"
        },
        {
          "tag": "v0.1.43",
          "kind": "patch",
          "published_at": "2026-07-11T07:43:27Z"
        },
        {
          "tag": "v0.1.42",
          "kind": "patch",
          "published_at": "2026-07-11T06:54:49Z"
        },
        {
          "tag": "v0.1.41",
          "kind": "patch",
          "published_at": "2026-07-11T05:21:27Z"
        },
        {
          "tag": "v0.1.40",
          "kind": "patch",
          "published_at": "2026-07-10T14:05:42Z"
        },
        {
          "tag": "v0.1.39",
          "kind": "patch",
          "published_at": "2026-07-06T10:18:50Z"
        },
        {
          "tag": "v0.1.38",
          "kind": "patch",
          "published_at": "2026-07-03T20:32:18Z"
        },
        {
          "tag": "v0.1.37",
          "kind": "patch",
          "published_at": "2026-07-03T17:19:00Z"
        },
        {
          "tag": "v0.1.36",
          "kind": "patch",
          "published_at": "2026-07-03T16:17:31Z"
        },
        {
          "tag": "v0.1.35",
          "kind": "patch",
          "published_at": "2026-07-03T15:24:30Z"
        },
        {
          "tag": "v0.1.34",
          "kind": "patch",
          "published_at": "2026-07-03T15:00:21Z"
        },
        {
          "tag": "v0.1.33",
          "kind": "patch",
          "published_at": "2026-07-03T14:31:49Z"
        },
        {
          "tag": "v0.1.32",
          "kind": "patch",
          "published_at": "2026-07-01T14:41:08Z"
        },
        {
          "tag": "v0.1.31",
          "kind": "patch",
          "published_at": "2026-06-30T09:34:07Z"
        },
        {
          "tag": "v0.1.30",
          "kind": "patch",
          "published_at": "2026-06-11T21:17:39Z"
        },
        {
          "tag": "v0.1.29",
          "kind": "patch",
          "published_at": "2026-06-08T22:25:29Z"
        },
        {
          "tag": "v0.1.27",
          "kind": "patch",
          "published_at": "2026-06-06T21:44:11Z"
        },
        {
          "tag": "v0.1.26",
          "kind": "patch",
          "published_at": "2026-06-05T19:01:41Z"
        },
        {
          "tag": "v0.1.25",
          "kind": "patch",
          "published_at": "2026-06-05T15:42:20Z"
        },
        {
          "tag": "v0.1.24",
          "kind": "patch",
          "published_at": "2026-06-05T15:42:20Z"
        },
        {
          "tag": "v0.1.23",
          "kind": "patch",
          "published_at": "2026-06-03T22:44:31Z"
        },
        {
          "tag": "v0.1.22",
          "kind": "patch",
          "published_at": "2026-06-03T21:30:37Z"
        },
        {
          "tag": "v0.1.21",
          "kind": "patch",
          "published_at": "2026-06-02T18:21:42Z"
        },
        {
          "tag": "v0.1.20",
          "kind": "patch",
          "published_at": "2026-05-24T07:21:04Z"
        },
        {
          "tag": "v0.1.19",
          "kind": "patch",
          "published_at": "2026-05-20T15:25:32Z"
        },
        {
          "tag": "v0.1.18",
          "kind": "patch",
          "published_at": "2026-05-20T15:25:32Z"
        },
        {
          "tag": "v0.1.17",
          "kind": "patch",
          "published_at": "2026-05-15T18:30:44Z"
        },
        {
          "tag": "v0.1.16",
          "kind": "patch",
          "published_at": "2026-05-05T15:44:50Z"
        },
        {
          "tag": "v0.1.15",
          "kind": "patch",
          "published_at": "2026-05-03T16:35:51Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-03-01T09:30:08Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-02-24T18:51:15Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-02-22T18:15:02Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-02-22T18:15:02Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-02-18T16:34:15Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "7f852c98ba3ee39ad1bb7b04dad56c4ff634a2b9",
          "body": "…pture\n\nObjectRoute gains External so an objects-folder item can carry an\nopen-in-new-tab entry; Mount/MountDesc accept RouteOptions so Hidden()\nkeeps a proxied subtree routable without a navigation entry; wildcard\ninstance capture collapses chi's per-method walk into one entry per\ntarget, rendering\n[…]\nunts as navigable folders instead of one\nliteral-star row per HTTP verb.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01XGF9eZKyyUhbqacCWxeURM",
          "is_bot": false,
          "headline": "chiutil: external object routes, hideable mounts, deduped wildcard ca…",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-22T19:56:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eb77129d433eba216d9bcf8e9bf8d578e654ef94",
          "body": null,
          "is_bot": false,
          "headline": "removed design doc",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-22T17:51:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05bc6c1296d1d51f50a6bd47c63f9a19597344f2",
          "body": "Three follow-ups from running the factory demo:\n\n- The memory subsystem's persister warned twice per sample tick against an\n  unwritable state dir. The monitor now drops the on-disk series tier at\n  construction (one startup warning) and runs fully in-memory in limp mode.\n- A missing version pointer\n[…]\nreads as the known degraded\n  condition rather than a transient failure.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014i3BnghCeyxJwxssEzrCnW",
          "is_bot": false,
          "headline": "Polish limp mode surfaces and the origin not-found message",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-22T15:22:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ac1ed93f18bcc62ca8f0c3490bbe27c9e6aa138e",
          "body": "An image-provided factory version (the A/B firmware pattern) lets a\ncontainer be fully baked yet self-updating: components.factory names a\nread-only bundle dir outside the state dir that the version machinery\ntreats as always prepared. It is the boot target when nothing usable is\non disk and the ori\n[…]\ntests written characterization-first against the\nold hard-fail behavior.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014i3BnghCeyxJwxssEzrCnW",
          "is_bot": false,
          "headline": "Add factory version fallback and limp mode to the supervisor",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-22T15:14:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e645c96706e417f530a03949736e952505292a66",
          "body": "runctl now aggregates the health of every managed target. A new\nStateMonitor scrapes each target's backoffice through runctl's own\nreverse proxy for /state and /metrics, mirrors the results into a\nstatekit registry, and serves the health console at /health alongside\nthe aggregate /state (YAML) and /\n[…]\ne retained\nfor the console's per-target timeseries drawer.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Xn8jCBtDnxWXmuWk1yMCyZ",
          "is_bot": false,
          "headline": "Add a statekit health monitor to runctl",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-19T19:23:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b147468d2fff4b379e0f3745c65752d29f64e386",
          "body": "DefaultInitialTestDelay drops from 30s to 5s, and execrun configs can\nnow set initial_test_delay (Go duration string) per target, which wins\nover Options.InitialTestDelay. Config templating applies, so targets\ncan wire it to an environment variable.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KHoUNVFniCHbNxGbvGMFfj",
          "is_bot": false,
          "headline": "Lower deferred initial test delay to 5s and make it configurable",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-11T07:43:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "49cf8e06fb66b4e7921d362cc2027a393a814013",
          "body": "SkipInitialTests kept boot fast but left the test phase without a result\nforever on a quiet session, so runui's Tests page showed \"pending\" until\na file change or manual trigger. Schedule the deferred tests to run once\nin the event loop (default 30s after a successful startup, configurable\nvia Optio\n[…]\nailed startup skips them; the next successful rebuild runs tests\nanyway.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KHoUNVFniCHbNxGbvGMFfj",
          "is_bot": false,
          "headline": "Run skipped initial tests in the background after startup",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-11T06:54:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "57da798a45e5ac12f70e74eceed872dce213fafc",
          "body": null,
          "is_bot": false,
          "headline": "Mount supervisor logs through logviewer",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-11T05:21:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c42ec6f2a2cecc7f9de59e6ebf2de0d5d632f878",
          "body": null,
          "is_bot": false,
          "headline": "Extract backoffice log parser package",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-11T05:21:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a001bd5549ba6fd0228b15c2e8594a5108cadfd",
          "body": null,
          "is_bot": false,
          "headline": "Add hidden backoffice route entries",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-11T05:21:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01ef54b422b9a87e2743192ab4af24e51e9cf263",
          "body": "A test-only trigger (and every phase of a build-only target) enters\nstarting/<stage> via markPhaseStart but nothing transitioned back on\nsuccess, so runui showed targets as testing forever. On success, return\nto running/run when the managed process is still up, and to idle for\nbuild-only targets.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01JtbtHSpDaaxjJ4UP3NBbLM",
          "is_bot": false,
          "headline": "Restore target state after successful phase without a restart",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-11T04:25:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dfd6509e3a771ce006b6197ce1bd9cdd1ef8b567",
          "body": null,
          "is_bot": false,
          "headline": "Add log downloads and markdown ordering",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-11T04:06:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbe90140a4f10a30e6afa6d204f802663d672587",
          "body": null,
          "is_bot": false,
          "headline": "Document log viewer follow-ups",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-10T14:05:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9b61a5460b4db08e7a96329ce79e6de8579c953",
          "body": null,
          "is_bot": false,
          "headline": "Add backoffice log viewer",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-10T14:03:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d168341c275d21a8c704598acae7beb9a03b8901",
          "body": null,
          "is_bot": false,
          "headline": "Add microtimeline formatted append helpers",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-10T11:29:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6582b19d06149916f2c48664e426c82b65d8cc23",
          "body": null,
          "is_bot": false,
          "headline": "Fix supervisor actions and deploy naming",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-06T10:18:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4576b4239d921387e89bad33b4418ba77315577",
          "body": null,
          "is_bot": false,
          "headline": "Skip runctl tests on first start",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-06T09:37:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cdf736d3a71e30d23ccd6a1441cead9b73f238d",
          "body": null,
          "is_bot": false,
          "headline": "Add supervisor backoffice static dirs",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-03T20:32:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b68dae5990a6a4de320527fc90fd2f2f358f0eeb",
          "body": "statemonitor.observe.history_dir enables file-backed health history:\nthe timeline chart persists as day segments in <dir>/chart/ and state\ntransitions + incidents in <dir>/journal.ndjson, so both survive a\nsupervisor restart. A relative path resolves under state_dir; empty keeps\ntoday's in-memory be\n[…]\ns\nthe pre-layer endpoints; the observer test now asserts /state/targets.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01U6vJn6ZEKXXXbMDdMQEx2g",
          "is_bot": false,
          "headline": "Persist observer health history under a configurable history_dir",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-03T17:19:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba108f83b9399446cb76baa3f0d3cd2abbd73d63",
          "body": null,
          "is_bot": false,
          "headline": "Show supervisor runtime duration",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-03T16:17:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5bf61ca365144f6e800159c62ba1ef149465b72",
          "body": null,
          "is_bot": false,
          "headline": "Nest overflow path under component memory",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-03T15:24:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "116d78d7ff1c273245b9ca14e75aec31ca03abfe",
          "body": null,
          "is_bot": false,
          "headline": "Use HTTP overflow paths for memory dumps",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-03T15:00:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "595a623fda375918557eec72a9ce6179d0e9175f",
          "body": null,
          "is_bot": false,
          "headline": "Improve supervisor memory overflow diagnostics",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-03T14:31:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4d3c2129ad575869c6533acf01adc1d96d38660",
          "body": "Swap the supervisor's health-aggregation console from the legacy storage UI to\nthe new statekit fleet state console. Both consume the same storage JSON API, so\nthe /health/api mount is unchanged; only the front-end handler differs.\n\nBumps statekit v0.0.11 -> v0.0.17 for the new console package.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013LahvYJtKwdGGGkAxGPGyv",
          "is_bot": false,
          "headline": "Serve fleet state console at supervisor /health",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-01T21:29:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b52a797e994630c4f89a1c7b3772440e3ec3984e",
          "body": null,
          "is_bot": false,
          "headline": "Add supervisor portal log links",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-01T21:06:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aec01eee40762d5eb125d4326d11a347a6b1e83a",
          "body": "…ded text\n\n- .ko.yaml: switch base image to cgr.dev/chainguard/busybox:latest so the\n  image ships a CA bundle (Docker Hub busybox has none), fixing outbound TLS\n  cert verification. Keeps a shell for in-pod debugging.\n- processlog: replace syscall.Dup2 with a platform-split dupFD helper\n  (dup3 on \n[…]\ntill active, instead of the misleading\n  \"no enforcement\".\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01D6ypvzC1qVDBJyFYjWZDfk",
          "is_bot": false,
          "headline": "supervisor: chainguard base image + arm64 log fd fix + accurate degra…",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-01T16:12:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "34230c51a8240cd4cad66394c30f00b684925e62",
          "body": "Phase 2 of the memory subsystem. Adds a cgroup v2 leaf hierarchy\n(supervisor/ + workload/<leaf> per component) that charges each child\ninto its own leaf for exact per-component accounting, writes derived\nmemory.high/max limits, and reads per-leaf usage, stat, events, and PSI.\n\nA memoryEnforcer watch\n[…]\n behavior.\n\nIncludes a local leak demo under examples/supervisor-local.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CBgziKawb6K98eQW1NXNvm",
          "is_bot": false,
          "headline": "supervisor: cgroup2 leaf enforcement and per-component memory budgets",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-07-01T14:41:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e63cb73f760c4ae560cf1dd894ad5756e658ff7d",
          "body": null,
          "is_bot": false,
          "headline": "part 3",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-30T20:54:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41cd0825baba99efd7f2e8ce9018c3521bc60600",
          "body": "First iteration of the memory-management design: the supervisor measures,\nassesses, and displays per-component memory usage. It does not enforce limits\n(cgroup leaf creation and enforcement land in a later phase).\n\nTracking is on by default — with no `memory:` block the supervisor measures\neach comp\n[…]\n \"max\", which is\nambiguous with a maximum-observed value).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_015wgYP6enax6qjH9b6fstRe",
          "is_bot": false,
          "headline": "supervisor: per-component memory tracking, assessment, and display",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-30T20:53:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4a2b6d2dac0b6a880f5ee5d51881302dd7a784f4",
          "body": null,
          "is_bot": false,
          "headline": "part 2",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-30T20:45:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61a491a128234d47481c875107c0faffd9164d18",
          "body": null,
          "is_bot": false,
          "headline": "adding specific memory limit to deployment",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-30T20:42:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b18366a9c3a15a614dec232cb959f80f35a2db2e",
          "body": "First iteration of the memory-management design: the supervisor measures,\nassesses, and displays per-component memory usage. It does not enforce limits\n(cgroup leaf creation and enforcement land in a later phase).\n\nTracking is on by default — with no `memory:` block the supervisor measures\neach comp\n[…]\n \"max\", which is\nambiguous with a maximum-observed value).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_015wgYP6enax6qjH9b6fstRe",
          "is_bot": false,
          "headline": "supervisor: per-component memory tracking, assessment, and display",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-30T20:40:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a2591d980000b23d3e54b8aad557a1577c1eb846",
          "body": null,
          "is_bot": false,
          "headline": "Use BusyBox base image for ko builds",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-30T09:34:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "274dd80a593d6e5bfe337cc1dc1051bcd9b840c4",
          "body": null,
          "is_bot": false,
          "headline": "self sign",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-30T08:56:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e282b8e0297f33c3473c1cfa64578f9896f76b4",
          "body": "…sions\n\nTwo defects in the supervisor bundle (`prepare`) path:\n\n1. Eager `required` resolution at bundle time. Prepare calls\n   supervisor.LoadConfig only to read component names, but that triggers a\n   full strict template resolution of supervisor.yml's vars: block. The\n   public-URL vars use `{{ e\n[…]\nhole\n   stamp. Component names may use letters, digits, and '-', but not '_'.\n\nAdds config lenient/strict tests and a packageNameRE table test.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisordeploy: resolve bundle config leniently; fix underscore ver…",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-23T05:47:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "19c88c58a5ab7ee9ea60ab5c9a595045f16e5bcc",
          "body": null,
          "is_bot": false,
          "headline": "Add browsable supervisor process logs",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-11T21:17:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc0469f205be84004a479f0dfdf3315c620d23a8",
          "body": null,
          "is_bot": false,
          "headline": "Add supervisor proxy URL links",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-11T21:10:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14f54707441755c3aab5fbe2435eea22600aef15",
          "body": null,
          "is_bot": false,
          "headline": "exclude healthz",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-10T11:15:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d32ccf37b4b3983e4eaa489b0116d84f0eabe0e2",
          "body": "Replace hardcoded Hetzner server IP (in nip.io domains) and operator\nallowlist CIDR with required env vars injected at package time. Remove\nthe deployment summary doc that embedded the same infrastructure details.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Scrub server IP and operator CIDR from deploy configs",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-09T20:55:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4c87119a7b01a6bc12fafb95e252be699980bd43",
          "body": null,
          "is_bot": false,
          "headline": "Add external supervisor components",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-08T22:25:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ba8d28b1cb69c698862c8d5baf513404225897d",
          "body": null,
          "is_bot": false,
          "headline": "Omnibus supervisor portal and folder updates",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-07T17:10:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f033a53774b04edfa1562c377232e441bd7fb4ad",
          "body": null,
          "is_bot": false,
          "headline": "Add default route folder index previews",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-06T21:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61368d5dcd7af02037e8cb8df36cc52689da7a2c",
          "body": null,
          "is_bot": false,
          "headline": "promote",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-05T19:01:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "feeedf96910272f09614b76f230335cd04dcb917",
          "body": null,
          "is_bot": false,
          "headline": "Preserve proxy prefixes for action previews",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-05T15:42:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "419fda729f137b6c44d409778e845c644cdaf001",
          "body": null,
          "is_bot": false,
          "headline": "Fix action form fetch URL in srcdoc previews",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-05T15:23:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "163efc8e2253c49eec583d3420d846f5a30a9c8b",
          "body": null,
          "is_bot": false,
          "headline": "Add dynamic favicons and supervisor incidents",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-05T11:36:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f10a03c69be44e390c7e8f5f72d28029ef7a7e5",
          "body": null,
          "is_bot": false,
          "headline": "Improve supervisor controls and auth",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-03T22:44:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef78a9fb5a8cb6f8c820b409e7887e205f6a1aaf",
          "body": "Project a target file's top-level env map into the generated Helm\nvalues.yaml (.Values.env) at bundle time, so per-target, committed pod\nenvironment is supported. It is the lowest-priority env layer: the\nhost-side values.local.yaml is still layered after values.yaml and wins\non conflict, keeping sec\n[…]\nv backoffice endpoint that serves the supervisor process\nenvironment as YAML, redacting names containing SECRET, PASSWORD, or KEY.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add target env projection + /env backoffice endpoint",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-03T21:30:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "19d851c37adb7c57688cbb8f08a312bae68d47c4",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'supervisor-login-gate'",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T18:21:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0eb7ac8f3d5c0c27fa08d7a3d29b280287551fa",
          "body": null,
          "is_bot": false,
          "headline": "Add supervisor deployment bundle factory",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T17:48:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de7298ffe5ea179e18137ac4de7a5af7aa91c5f1",
          "body": "Add an opt-in basic_auth block to SupervisorConfig that gates the entire\nsupervisor HTTP surface — portal, /proxy, /health, and the whole\n/backoffice tree (the healthz probe included) — behind a login form.\n\nUnauthenticated requests are redirected to a plain, unbranded /login page;\na correct usernam\n[…]\nsts for the redirect, form, bad creds, cookie grant,\nstale-timestamp and tampered-signature rejection, healthz gating, and logout.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisor: optional login-gate auth on the HTTP surface",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T17:41:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3def784abbd0050d6813e0de8e1067395f766222",
          "body": null,
          "is_bot": false,
          "headline": "supervisor productization",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T14:21:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4067b7e311e48d922f72c7e56009bc331cff7c12",
          "body": "…config, /backoffice/version\n\nThree related additions to how the supervisor surfaces state:\n\n- Per-component signals on the snapshot and portal:\n  * global_state — the component's own health, read by a built-in /healthz\n    probe (body pass/warn/fail on 200, \"down\" on any non-200/error). Always\n    \n[…]\ninfo; also shown on the backoffice\n  index. The hello example now emits \"pass\" from /healthz to match the\n  global-state contract.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisor: per-component global-state + update-status, statemonitor …",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T13:34:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b0ca4b767c023468da33a684c54303233946ff18",
          "body": null,
          "is_bot": false,
          "headline": "Add supervisor local snapshot mode",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T10:36:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c91b446a44197a15c64d31b31015b1347a14ef43",
          "body": "… manifest\n\nBackground packaging + env work:\n- Render each component's *.tmpl against the same deployment/launch env the\n  child receives (buildEnv + renderVersionTemplatesWithEnv), with\n  artifact-compatible aliases (BUILD_DIR/BUILDDIR, REQUIRED_VERSION/VERSION);\n  render runs before launch in the \n[…]\nape the hello example to ship manifest.yml (drops defaults.yml).\n- ko build + deploy bundle (Makefile, .ko.yaml, deploy/) and docs\n  (supervisor_project.md, supervisor_deployment_summary.md, TODO.md).",
          "is_bot": false,
          "headline": "supervisor: ko packaging, per-deployment env/render refactor, example…",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T10:08:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81d5de025161c122e471f0672e973090d2bd2e4a",
          "body": "…h console\n\nAdd an opt-in health-aggregation role. The supervisor already scrapes each\ncomponent's /state into its registry; the observer self-ingests\nregistry.StateDisplay() into a statekit storage on a ticker, giving current\nstate, per-target rollups, and transition events — served by statekit's\nc\n[…]\nalations are\nwired-ready but deferred until a component exposes them. Pulls statekit\nstorage deps (freecache, klauspost/compress).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisor: optional observer role — statekit health storage + /healt…",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T09:49:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5df55a2c35056aff820fe5553122517f84855a48",
          "body": "Add a user-facing portal as the supervisor's front door, the counterpart\nto the /backoffice control surface:\n\n- /proxy/<component>/* reverse-proxies to the component's own port (its\n  first-class handle): prefix stripped, all methods, query + deep paths\n  forwarded verbatim; unknown -> 404, unreacha\n[…]\n Tests\ncover the proxy (deep path/query/502), portal (cards, README->HTML+table,\nhealth, redirects, 404), and the time humanizers.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisor: portal home page, component proxy, and health detail",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T09:10:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8571e092b3c58db79613f8a12bae49d9342cc416",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chiutil: capitalize the item id in an object instance page title",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T07:32:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2285830162f87fa1e2dac32403dde95ec3bf4ea7",
          "body": "Every instance page rendered the listing folder's title, so a component\npage read \"Components\" instead of the component's name. serveInstanceJSON\n(and the objectsFolder equivalent) now title the page with the instance id\nand surface the instance's registered description as the subtitle.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chiutil: title a wildcard/object instance page by its id, not the folder",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T07:27:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "53fe468f8a815721848404ed85fef2662b4c79b9",
          "body": "The current_version_logs shortcut redirected to an absolute\n/backoffice/logs/<name>/<version>/. Behind a path-stripping reverse proxy\n(the backoffice ingress model) r.URL.Path carries no proxy prefix, so the\nabsolute Location dropped it and 404'd. Issue a relative Location\n(\"../../logs/<name>/<versi\n[…]\nects used\nfor trailing slashes. Also wire the backoffice mount through the\nbackofficePrefix const so there is one source of truth.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisor: make current_version_logs redirect proxy-safe",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T07:22:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d09c64c68c48fa14cc8fe39996f169385dd3ee9",
          "body": "…r routing\n\nRelocate the supervisor's own HTTP handlers (healthz, state, metrics,\nsummary, components, logs) from the bare root into a /backoffice subtree,\nleaving the root router free for supervisor-specific routes.\n\nMounting a RouteFolder below the root exposed two latent chiutil bugs:\n\n- A folder\n[…]\nount root — so the breadcrumb's home is the mount root. This also fixes\n  Static()'s StripPrefix, which was broken on sub-folders.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisor: move control surface under /backoffice; fix chiutil folde…",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T07:16:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "df0c88c27e4d37e5bded47b5bad0a10546adbc45",
          "body": null,
          "is_bot": false,
          "headline": "isolating html view",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-06-02T05:42:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47d397346c7ee06fb047155db131e07a4b8b0f09",
          "body": null,
          "is_bot": false,
          "headline": "docs: document runctl env fallback file",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-30T07:02:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "365c00b70ec38dc13572347968f98511616d0eb7",
          "body": "…nt_version_logs shortcut\n\nstdout / stderr are now captured to rotating files under\nstate_dir/logs/<component>/<version>/, with size + history caps configurable\nvia log_max_size and log_max_files. The same directory is exposed to the\nchild via OP_LOG_DIR (and .LOG_DIR in templates) so app logs live \n[…]\ndEntries gained\nMarkInstanceExternal so the link renders as new-tab. Tail/range utilities\nfrom runctl moved to internal/logtail for shared use.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisor: per-version log capture, browseable static folders, curre…",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-24T07:21:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0f8dde420da35ab4a31b12d783e494979f4bd6fb",
          "body": "…launch contract\n\nTemplates as the 4th install step\n---------------------------------\n\nVendor tarballs may now ship a defaults.yml at the root plus any number of\n*.tmpl files anywhere in the tree. PrepareVersion becomes a four-step\npipeline: download, verify, extract, render. A render failure surfac\n[…]\n, syntax error, required-var error,\n  validation by extension, idempotency); 4 specs in config_test.go for\n  the new template-on-load behavior.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "supervisor: per-deployment config via in-tarball templates + simpler …",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-22T23:56:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "069956d74478fed3a71da48f10bdcb21a89eb54d",
          "body": null,
          "is_bot": false,
          "headline": "pushed statekit version",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-22T21:57:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11d332e8fcd690049894e85cefd9545e0eda9076",
          "body": "…rvability\n\nThe third leg of go-run alongside execrun and runctl: one supervisor\ninstance manages N components, keeps them running, and pulls signed\nupdates from an HTTPS (or local file://) endpoint. Polling-only —\nthe customer opens one outbound destination, not an inbound port.\n\nHighlights:\n\n- Two\n[…]\ny optional. Working standalone example\n  under examples/supervisor (no origin process needed for the default\n  make example-supervisor target).\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add supervisor: vendor-controlled component runner with statekit obse…",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-22T21:32:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0dc4eb33a537ee076983bf09d8a6f8f8e5f9223d",
          "body": null,
          "is_bot": false,
          "headline": "new api",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-20T15:25:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a24095a8855bd86822d2cee7a7cea83e7f11540a",
          "body": null,
          "is_bot": false,
          "headline": "cosmetics",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-20T13:47:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ef6143e4c4eba08342c680e540b803d9097ee99",
          "body": null,
          "is_bot": false,
          "headline": "utility function",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-20T12:18:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54f42202b4482c52caedd62e8c514b94e1076e06",
          "body": null,
          "is_bot": false,
          "headline": "Add htmlview renderer utilities",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-20T05:55:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38fff1deb0c8b8db62cfe93140646f8d2161f8f3",
          "body": null,
          "is_bot": false,
          "headline": "Improve routefolder HTML preview handling",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-19T22:05:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "299bafe21d4938c6266539b51295fb2916d1bd8d",
          "body": "Drops the per-service health tracking (CreateServiceStatus, ServiceLevel,\nGetStatus, /status endpoint, client.Status, runui rendering and polling)\nto make room for a redesigned internal state package.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove ServiceStatus subsystem from backoffice",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-18T14:20:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b0fd462e17ac332f07be8382caeafe981f817c8d",
          "body": null,
          "is_bot": false,
          "headline": "Add flat JSON object folder entries",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-15T18:30:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "633e0124f56b44867ed936b873de3d67317966e5",
          "body": "Replaces Post / PostDesc with PostFunc(PostArgs{Path, Description,\nHandler, Action}). When Action is non-nil, GET on the same path\nrenders the action's HTML so the harness's click-to-open behaviour\ntakes the user to a confirmation form that POSTs back to the same\nURL. CLI clients keep POSTing direct\n[…]\nin an isolated iframe via srcdoc so the embedded\n  form's CSS/JS can't conflict with the harness page.\n- Action templates ship with prefers-color-scheme dark mode that\n  tracks the OS / browser theme.",
          "is_bot": false,
          "headline": "chiutil: PostFunc(PostArgs) with optional Action for confirm-and-submit",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-05T15:44:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c0c742541fac28147867e74ae71f975d93cb935b",
          "body": null,
          "is_bot": false,
          "headline": "Log runctl startup failures to target logs",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-04T20:16:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8c867f45bbb8dca8324d103b0122df77c98e3ca",
          "body": null,
          "is_bot": false,
          "headline": "Add runui component detail pages",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-03T16:35:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fec5bdc2b311b45318f314fc463f116e67b24e3",
          "body": null,
          "is_bot": false,
          "headline": "small additions",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-05-03T13:52:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2041709a69c9455073b47748fa7e601d0738adb5",
          "body": null,
          "is_bot": false,
          "headline": "Align runctl heartbeat and recover after initial build errors",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-04-25T14:59:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5286a54087cbd35a3cdbc1fe12ce795f45680405",
          "body": null,
          "is_bot": false,
          "headline": "Refactor runui target phase display and add execrun metadata",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-04-19T14:35:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ff6217b6a82b0a3a70c082f6b2594caa2b93a9a",
          "body": null,
          "is_bot": false,
          "headline": "Add runui summary and debug status metadata",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-04-18T14:29:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddc4e0ddba9ac7f0437a7bebada59a4e6a2cf82f",
          "body": null,
          "is_bot": false,
          "headline": "Added test",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-04-18T11:49:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "534f6fa143191e0c4b821540c2ddbf8e82b9a77d",
          "body": null,
          "is_bot": false,
          "headline": "add ability to load environment variables from file",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-03-01T09:30:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7b299d642e93b38fa303030729f8dcf75002e8e",
          "body": null,
          "is_bot": false,
          "headline": "fix global path calculation",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T19:44:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a87494e4fb90835b9e891464056a1c1d50580eb4",
          "body": null,
          "is_bot": false,
          "headline": "unneedded",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T18:55:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7803846506bea44284e8b1fe8339a9d2ec9c18e4",
          "body": null,
          "is_bot": false,
          "headline": "Support external link, update documentation",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T18:51:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76efe07a63f9aef68e89d0a62d0a2b3b36effb0c",
          "body": null,
          "is_bot": false,
          "headline": "Ongoing backoffice tweaks",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T18:37:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca1c7e9c10c4a8df5441e43072dc763d314ca397",
          "body": null,
          "is_bot": false,
          "headline": "minor styling fixes",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T16:30:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d107627f5b3d08f976f6cb8e63ed10ae4c88538f",
          "body": "When no services are registered, GetStatus() returned a nil slice which\nmarshals to \"services\": null in JSON, causing the UI to show \"Backoffice\nunavailable\". Initialize as empty slice so it serializes as [].\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix status JSON serializing services as null instead of empty array",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T16:22:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0894d360bb88e6f27ea8adb6490d7cc360a9fa0f",
          "body": "Move chiutil (self-documenting route folder system) from safeapi into\ngo-run. Replace the plain HTML index in backoffice with chiutil's\ntwo-panel browsable UI showing all routes with descriptions.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add chiutil package and use it for backoffice route browsing UI",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T13:23:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4bffe80a95e3ccbdbdd9a8310a5734373f5e85f0",
          "body": null,
          "is_bot": false,
          "headline": "support backoffice and service status",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T11:17:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3634ded778dd30881e888786c89b21a22235894e",
          "body": null,
          "is_bot": false,
          "headline": "move to direct invocation, without shell",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-24T10:07:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45b85b8203746d5c04fece368f4a5d501dc42b0c",
          "body": "Thread the -v flag through Controller → target → execrun.Options so\nverbose logging works in watch mode. Split heartbeat tick into build\nstatus (green/red dot) and exec status (red ↓ on non-zero exit).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Propagate verbose flag from runctl to execrun, add exec health tick",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-23T15:24:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "596ea275065a130361f2fed0cb0cd5bac82628da",
          "body": null,
          "is_bot": false,
          "headline": "demonstrate using vars with execrun",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-22T20:59:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d79c4cfe65ceb608438ee5110e451bf670856190",
          "body": "Log SIGTERM, process stopped, and SIGKILL escalation events to the\nrun log using the same ======== <timestamp> : format.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add lifecycle log markers to run log (stop/kill events)",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-22T20:32:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fe9260c12a1c3a63491774906fb20aaea939a12f",
          "body": "Write ======== <timestamp> : <event> lines to the appropriate log\nfiles for: command being run, command failed, build done, process\nstarted (with pid and command), and process exited (with exit code).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add timestamped marker lines to build and run logs",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-22T20:28:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9d74cd7d7207d96af87a7f716ed4200bd8046dad",
          "body": "Refactor execSteps() into two phases so build commands write to the\nbuild log (ExecStdout/ExecStderr) and exec prep commands write to the\nrun log (Stdout/Stderr). Extract runStep() helper to deduplicate\ncommand setup. Add BuildSteps()/ExecPrepSteps() methods on Config.\n\nAlso add build info (version, commit, branch, date) via ldflags to\nboth execrun and runctl binaries.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Separate build/exec-prep output streams, add build info",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-22T20:24:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bf704dbbe39f31ffef6ebc20d396ef9a2a741eb3",
          "body": "- New `vars` command dumps resolved template variables (global + per-target)\n  with override annotations, supports `-t` filter\n- Fix Steps() to include exec commands before the last as preparation steps\n  instead of silently dropping them\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add `runctl vars` subcommand, fix multi-exec dropping earlier commands",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-22T19:41:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "94bccd725fec5c143e82fd7ac0b0943f574e580e",
          "body": "Enables batch build and sum operations without watchers or HTTP server.\nThe repeatable `-t` flag filters which targets to operate on across all modes.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add `runctl build`, `runctl sum` subcommands and `-t` target filter",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-22T18:15:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "66904e15005b3fd785897948560a8349ec8fbed7",
          "body": null,
          "is_bot": false,
          "headline": "minor",
          "author_name": "Gur Shatz",
          "author_login": "gur-shatz",
          "committed_at": "2026-02-22T16:59:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 37,
      "commits_last_year": 112,
      "latest_release_at": "2026-07-22T19:56:14Z",
      "latest_release_tag": "v0.1.47",
      "releases_from_tags": true,
      "days_since_last_push": 4,
      "active_weeks_last_year": 16,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 2.1
    },
    "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/gur-shatz/go-run",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/gur-shatz/go-run",
          "is_deprecated": false,
          "latest_version": "v0.1.47",
          "repository_url": "https://github.com/gur-shatz/go-run",
          "versions_count": 37,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-22T19:56:14Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "examples/backoffice-demo/go.mod",
        "examples/hello-go/go.mod",
        "examples/supervisor/hello/go.mod",
        "examples/ticker/go.mod",
        "go.mod"
      ],
      "largest_source_bytes": 48947,
      "source_files_sampled": 167,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "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/bmatcuk/doublestar/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.10.0"
        },
        {
          "name": "github.com/fsnotify/fsnotify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.0"
        },
        {
          "name": "github.com/go-chi/chi/v5",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.2.5"
        },
        {
          "name": "github.com/go-playground/validator/v10",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v10.28.0"
        },
        {
          "name": "github.com/gur-shatz/statekit",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.23"
        },
        {
          "name": "github.com/mitchellh/mapstructure",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "github.com/onsi/ginkgo/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.28.1"
        },
        {
          "name": "github.com/onsi/gomega",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.39.1"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.40.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "github.com/yuin/goldmark",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.2"
        },
        {
          "name": "github.com/google/shlex",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20191202100458-e7afc7fbc510"
        }
      ],
      "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": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "gur-shatz",
          "commits": 112,
          "avatar_url": "https://avatars.githubusercontent.com/u/40355698?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 9,
            "reason": "binaries present in source code",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 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": null,
            "reason": "no workflows found",
            "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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "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": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "27 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "7f852c98ba3ee39ad1bb7b04dad56c4ff634a2b9",
        "ran_at": "2026-07-27T11:34:16Z",
        "aggregate_score": 2.5,
        "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": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/gur-shatz/go-run",
    "host": "github.com",
    "name": "go-run",
    "owner": "gur-shatz"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 41,
      "inputs": {
        "security": 25,
        "vitality": 80,
        "community": 24,
        "governance": 32,
        "engineering": 38
      },
      "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": 75,
            "inputs": {
              "commits_last_year": 112,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 16
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "16/52 weeks with commits",
                "points": 11.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 16
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "112 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 112
                    }
                  }
                ],
                "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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 37,
              "latest_release_tag": "v0.1.47",
              "releases_from_tags": true,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 2.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "37 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 37
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "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": 32,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "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": "at_risk",
            "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": 34,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "gur-shatz",
              "public_repos": 4,
              "account_age_days": 2961
            },
            "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": "0 followers of gur-shatz",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "gur-shatz"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "4 public repos, account ~8 yr old",
                "points": 17.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 4
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/gur-shatz/go-run"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "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 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "37 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 37
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Engineering Quality",
        "value": 38,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "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": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 25,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6.8,
                "status": "partial",
                "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 workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "27 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 59,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 21,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.39,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "39 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 20.8,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 39,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.36,
              "toolchain_manifests": [
                "examples/backoffice-demo/go.mod",
                "examples/hello-go/go.mod",
                "examples/supervisor/hello/go.mod",
                "examples/ticker/go.mod",
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "36 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 36,
                      "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 48947,
              "source_files_sampled": 167,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/167 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 167,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T11:34:22.189357Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/g/gur-shatz/go-run.svg",
  "full_name": "gur-shatz/go-run",
  "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.