Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 10:19 UTC

RoninForge / budgetclaw

Local spend monitor for Claude Code. Zero key, zero prompts, zero latency added.

GoMIT★ 7 estrellas⑂ 0 forksdesde abr 2026Ver en GitHub ↗

RoninForge/budgetclaw tiene un índice de salud de 67 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (90/100) y la más baja, Community & Adoption (50/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

67
global / 100
Moderado

Índice de salud del software

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

67
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

Ronin ForgeOrganización
0 seguidores34 repositorios públicosdesde abr 2026

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/RoninForge/budgetclawv1.4.0-30hace 0 días

Métricas por categoría

Vitalidad

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

79Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
7.6/36Cadencia de commits — 11/52 semanas con commits
17.9/18Volumen de commits — 97 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_year97
human_commit_share0,837
days_since_last_push0
active_weeks_last_year11
Cómo se puntúa
27/27Publica versiones — 30 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~2,4 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count30
latest_release_tagv1.4.0
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases2,4

Comunidad y Adopción

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

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

Sostenibilidad y Gobernanza

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

55Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
34.2/38.3Aceptación de PR — 34/38 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/27 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs34
open_issues0
closed_issues2
issue_closed_ratio1
closed_unmerged_prs4
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
0/25Alcance del propietario — 0 seguidores de RoninForge
11.8/25Trayectoria — 34 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_loginRoninForge
public_repos34
account_age_days104
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 30 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/RoninForge/budgetclaw
ecosystemsgo
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

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

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://roninforge.org/budgetclaw
10/10Descripción del repositorio
10/10Topics — 15 topics
0/10Wiki
Datos de entrada utilizados
topicsai-dev-tools, budget-monitor, claude-code, claude-code-plugin, cli-tool, cost-monitoring, developer-tools, open-source, spend-tracking, token-usage, ccusage, claude-max, cost-dashboard, team, usage-tracking
has_wikino
homepagehttps://roninforge.org/budgetclaw
has_readme
has_docs_dir
has_description

Seguridad

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

58Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 10 out of 10 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/27 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
5/5SAST — SAST tool is run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate5,8

Preparación para IA

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

82Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 81 de 82 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,988
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes6426
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 48 de los últimos 98 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 16 de los últimos 98 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,49
toolchain_manifestsgo.mod
dependency_bot_commit_share0,163
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/64 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes25.704
source_files_sampled64
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

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

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 5.8 / 10
5.8agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-22 10:19 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests10 out of 10 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/27 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
10SASTSAST tool is run on all commits
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 5
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/BurntSushi/tomlv1.6.0go.mod
Gogithub.com/fsnotify/fsnotifyv1.10.1go.mod
Gogithub.com/shirou/gopsutil/v4v4.26.5go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gomodernc.org/sqlitev1.53.0go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "ai-dev-tools",
        "budget-monitor",
        "claude-code",
        "claude-code-plugin",
        "cli-tool",
        "cost-monitoring",
        "developer-tools",
        "open-source",
        "spend-tracking",
        "token-usage",
        "ccusage",
        "claude-max",
        "cost-dashboard",
        "team",
        "usage-tracking"
      ],
      "is_fork": false,
      "size_kb": 472,
      "has_wiki": false,
      "homepage": "https://roninforge.org/budgetclaw",
      "languages": {
        "Go": 463681,
        "Shell": 3919,
        "Makefile": 2661
      },
      "pushed_at": "2026-07-22T09:09:38Z",
      "created_at": "2026-04-09T07:25:27Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T09:11:29Z",
      "description": "Local spend monitor for Claude Code. Zero key, zero prompts, zero latency added.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "roninforge.org",
      "name": "Ronin Forge",
      "type": "Organization",
      "login": "RoninForge",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/274572802?v=4",
      "created_at": "2026-04-08T16:08:15Z",
      "is_verified": null,
      "public_repos": 34,
      "account_age_days": 104
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-07-22T09:11:23Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-07-21T15:31:24Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-07-20T02:55:42Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-07-17T19:30:10Z"
        },
        {
          "tag": "v1.1.4",
          "kind": "patch",
          "published_at": "2026-07-10T08:26:27Z"
        },
        {
          "tag": "v1.1.3",
          "kind": "patch",
          "published_at": "2026-07-09T05:40:53Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2026-07-08T07:13:15Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-07-07T05:09:25Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-07-02T12:59:32Z"
        },
        {
          "tag": "v1.0.8",
          "kind": "patch",
          "published_at": "2026-07-01T04:27:31Z"
        },
        {
          "tag": "v1.0.7",
          "kind": "patch",
          "published_at": "2026-07-01T03:51:23Z"
        },
        {
          "tag": "v1.0.6",
          "kind": "patch",
          "published_at": "2026-06-29T03:24:35Z"
        },
        {
          "tag": "v1.0.5",
          "kind": "patch",
          "published_at": "2026-06-24T15:27:09Z"
        },
        {
          "tag": "v1.0.4",
          "kind": "patch",
          "published_at": "2026-06-22T03:31:42Z"
        },
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2026-06-17T08:49:12Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-06-17T07:31:51Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-06-16T17:17:03Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-06-16T05:52:20Z"
        },
        {
          "tag": "v0.1.9",
          "kind": "patch",
          "published_at": "2026-06-10T15:55:18Z"
        },
        {
          "tag": "v0.1.8",
          "kind": "patch",
          "published_at": "2026-06-10T04:43:25Z"
        },
        {
          "tag": "v0.1.7",
          "kind": "patch",
          "published_at": "2026-05-29T07:03:15Z"
        },
        {
          "tag": "v0.1.7-rc1",
          "kind": "prerelease",
          "published_at": "2026-05-18T09:01:30Z"
        },
        {
          "tag": "v0.1.6",
          "kind": "patch",
          "published_at": "2026-05-18T08:45:30Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-04-28T06:50:43Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-04-28T06:37:27Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-04-28T05:41:53Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-04-28T05:12:39Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-04-14T03:22:51Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-04-09T13:13:10Z"
        },
        {
          "tag": "v0.1.0-alpha",
          "kind": "prerelease",
          "published_at": "2026-04-09T07:30:16Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a8c15d375844a3831acc40750d112b0aff6cf75f",
          "body": "Join a Goei team from inside a repo whose lead committed a non-secret\n.budgetclaw.toml pointer. `team join` runs a device-code request-to-join:\nit prints a code + URL to confirm in the browser and finishes once an\nowner/admin approves the device, saving the token and running a first sync.\nNo credent\n[…]\ndget.SetGoeiEndpoint: explicit endpoint write so switching a\n  self-hosted team back to the default cannot strand a stale endpoint\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(team): budgetclaw team join + repo pointer discovery (v1.4.0)",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-22T09:09:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "982ec930bbc35350ee297d26c851c07e03a855c9",
          "body": "The placeholders are only \"?\" bind markers; ids are bound args, so there is no injection. Adds a #nosec directive matching the repo's existing pattern so CI Lint passes.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(lint): mark guard_pending IN-clause parameterized for gosec (G202)",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-21T16:55:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0acbe4d063512fd74b7cbd69b434ce754b28f4ac",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v1.3.0",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-21T15:29:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "405c8f3e9aba22856d3437d62ed58ab84b32c7b0",
          "body": "Opt-in via `budgetclaw guard on`: watch fetches your team's budget caps\nfrom Goei (GET /api/policy with ETag, plus the sync-response piggyback)\nand enforces them on this machine. A per-developer or team cap sums the\nwhole machine; a per-project cap sums that project and only acts on its\nown sessions\n[…]\nSOURCE column; an\n`unlock` of a remote lock emits an override event.\n\nA device never obeys a server until Guard Mode is turned on.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(guard): enforce remote Goei team budget caps locally (Guard Mode)",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-21T15:27:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bbb8c7cde4255623dcf916b04db5fa4cd9af5bb5",
          "body": "goei-sync is live on npm. Note it after the canonical answer as the\nquick single-machine push (day and model); budgetclaw remains the\nalways-on agent with per-project/per-branch attribution and hard caps.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): mention npx goei-sync as the zero-install push path",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-21T10:08:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "32b5dc8d84ea458595d01a520d71740bfb4f27d5",
          "body": "pricing: refresh vendored ai-price-index to v2026.07.20-cb66f43.",
          "is_bot": false,
          "headline": "chore(release): v1.2.1",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-07-20T02:53:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8681e0ad1a234fafd3e5e5be51a5e081fcc2e974",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.07.20-cb66f43 (#43)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-07-20T02:53:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21e1f6f3f3f0941f029b8950e8d33c90bed49ad5",
          "body": "…llout snippet\n\nP3.1 agent-SEO batch. Adds the canonical team-tracking answer and\ndisambiguation line on the first screen, a demo link and a Goei vs ccusage\nlink, and a \"Roll out to a whole team\" section documenting the\n.claude/settings.json plugin propagation snippet (teammates are prompted to\ninstall, not silent; it registers the Claude Code plugin, not the CLI).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): canonical team answer, ccusage comparison link, team ro…",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-18T11:06:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "36d4b706a9c969e1a92f606c509a45de42608918",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v1.2.0",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-17T19:28:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b0d47646443c24fc504e16316b17f8877a259afd",
          "body": "--show-payload prints the exact JSON request body sync would POST and sends\nnothing (needs no token), so a user can audit every byte that would leave the\nmachine against Goei's ingest contract. --save persists the resolved token\n(and any explicit endpoint/machine) to the config so later syncs need n\n[…]\nrity auditable-payload claim and the one-command token\nsetup flow on the Goei tokens page. All package tests pass; go build clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(sync): add --show-payload and --save",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-17T19:27:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0a8d92b024dd3f489df163cd5eb4e4782ede6f06",
          "body": "pricing: refresh vendored ai-price-index to v2026.07.10-cc35e0b.",
          "is_bot": false,
          "headline": "chore(release): v1.1.4",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-07-10T08:24:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abf596e5cd41889b75b6cdd2d1855ba7969c3367",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.07.10-cc35e0b (#40)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-07-10T08:24:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47af7b9bdf004d8965f9cd648194e7a7b39e14a2",
          "body": "pricing: refresh vendored ai-price-index to v2026.07.09-43f905c.",
          "is_bot": false,
          "headline": "chore(release): v1.1.3",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-07-09T05:38:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14253a940a5a5d9a8dc577453995ba3d02318c1c",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.07.09-43f905c (#39)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-07-09T05:38:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93af404a5647c7cb454934dd3e10c2a4838d925d",
          "body": "pricing: refresh vendored ai-price-index to v2026.07.08-8eaf41d.",
          "is_bot": false,
          "headline": "chore(release): v1.1.2",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-07-08T07:11:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aaef8b52c563952204ef61f3e35a757436386e12",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.07.08-8eaf41d (#38)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-07-08T07:11:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbd4edb7cf939192e846a5dff4d66f5b16fa0b11",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v1.1.1",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-07T05:07:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce2ab03761740d87532eefce104d5abc6b205164",
          "body": "…cabulary\n\nMetadata and copy only, no code or behavior changes.\n\n- plugin.json: expand keywords to 20 high-intent GitHub-topic-valid slugs\n  (ccusage, cost-tracking, token-usage, claude-max, multi-machine, team,\n  burn-rate, etc.); refine description to carry Claude Code cost tracking\n  intent and t\n[…]\ncription with literal agent-match\n  strings (claude code cost, claude code usage, spend per project, per\n  branch, cost tracking).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(seo): enrich distribution surfaces with high-intent agent-SEO vo…",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-07T03:07:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8651531d2e9d542d86df2b040473781c07d6e635",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v1.1.0",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-02T12:57:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a00a2471dde7f89eb81e85b80c923ad98b62fc9e",
          "body": "Enables correct multi-machine rollup on the Goei server, which now keys\nlocal spend per machine. Without this, two machines' rollups collided and\noverwrote each other server-side.\n\n- add SpendRecord.Machine (json \"machine\", omitempty), threaded through\n  BuildPayloads and recordsForDay so every reco\n[…]\n README upgrade note for the one-time\n  transition double-count existing installs see after upgrading\n\nBuild, vet, and tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(sync): stamp each spend record with a machine identity",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-07-02T12:55:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8e4d6f9c930d316deeae1717fd1d3397a590b6ad",
          "body": "pricing: refresh vendored ai-price-index to v2026.07.01-b9ae0e4.",
          "is_bot": false,
          "headline": "chore(release): v1.0.8",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-07-01T04:25:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ba2bf60205169e3e20d1321a44399d95d0b3429",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.07.01-b9ae0e4 (#36)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-07-01T04:25:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5d483b47fe12580105041c32713a8d31cb2f38",
          "body": "pricing: refresh vendored ai-price-index to v2026.07.01-c31b7c3.",
          "is_bot": false,
          "headline": "chore(release): v1.0.7",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-07-01T03:49:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db32a53427e0b66f83c601a94bec60ded650b5f5",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.07.01-c31b7c3 (#35)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-07-01T03:49:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22f02df526d38e68180ad8d648f1210e9faa8bdc",
          "body": "pricing: refresh vendored ai-price-index to v2026.06.29-f7199e3.",
          "is_bot": false,
          "headline": "chore(release): v1.0.6",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-06-29T03:22:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbaa7c210a47084e106d07fdcfd5a2897f0e4dbb",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.06.29-f7199e3 (#34)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-29T03:22:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08df424111ca05f992bfda2d9ef348dc18d924a9",
          "body": "Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.52.0 to 1.53.0.\n- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)\n- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.52.0...v1.53.0)\n\n---\nupdated-dependencies:\n- dependency-name: modernc.org/sqlite\n  depende\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump modernc.org/sqlite from 1.52.0 to 1.53.0 (#29)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-26T15:34:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b51e9fbafb500fe082b402db765e9d71a6cdd045",
          "body": "Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8.\n- [Release notes](https://github.com/peter-evans/create-pull-request/releases)\n- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7...v8)\n\n---\nupdated-dependencies:\n- depende\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump peter-evans/create-pull-request from 7 to 8 (#28)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-26T15:34:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0fbcc9f842caee4490452377a96204c946a34422",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump actions/checkout from 6 to 7 (#27)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-26T15:34:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "17fe4a4859a53f0048fe1d1869fd7749d7ce461d",
          "body": "pricing: refresh vendored ai-price-index to v2026.06.24-a997f8b.",
          "is_bot": false,
          "headline": "chore(release): v1.0.5",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-06-24T15:25:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57a983e982b89d3f7c372d1ede498aef6e4e2b3c",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.06.24-a997f8b (#33)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-24T15:25:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a71b602a8fe4b79bdfd8afd6198debf8e185919a",
          "body": "The \"resolve latest\" fallback (scheduled/manual runs without an explicit\ntag) sorted upstream tags lexically/by version. ai-price-index tags are\nv<YYYY.MM.DD>-<sha>, so when several releases land on the same day the\ntrailing <sha> decides the order alphabetically rather than by recency.\nThat silentl\n[…]\nf --sort=-creatordate so the newest release wins. The strict\ntag-format validation and the dispatch/input-tag paths are unchanged.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): resolve latest ai-price-index tag by recency, not lexical (#32)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-22T06:46:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e7b17be0b846449c2d11b367b5cd02435305f26c",
          "body": "The dataset parity test hardcoded `asOf = 2026-06-16`, the dataModified\nof an earlier pinned tag. When the dataset adds a genuinely-new model\nwhose first interval starts after that date (e.g. claude-mythos-5,\neffective 2026-06-22), RatesForAt(model, asOf) returned ErrNoRateAtTime,\nTestParityWithCurr\n[…]\nche multipliers (they match exactly: 0.10x / 1.25x / 2.0x).\n\nAll of ./... is green.\n\nCo-authored-by: Solomonic <mr.yenza@gmail.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(pricing): dynamic parity asOf + bump ai-price-index to 1.0.3 (#31)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-22T06:07:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "55ace54272388e22568746cee967d3b8be47c3f0",
          "body": "pricing: refresh vendored ai-price-index to v2026.06.22-becbe72.",
          "is_bot": false,
          "headline": "chore(release): v1.0.4",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-06-22T03:29:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7ab857e5ff4d3ee0ed263839f2d6d72c3658899",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.06.22-becbe72 (#30)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-22T03:29:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b23ae1a495a9dd399795c56656ac85a489b662b6",
          "body": "pricing: refresh vendored ai-price-index to v2026.06.17-4ab5db2.",
          "is_bot": false,
          "headline": "chore(release): v1.0.3",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-06-17T08:47:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05df6567d8860e2741903fa12b6abe3010e277ed",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.06.17-4ab5db2 (#26)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-17T08:47:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f5e0a46072faf757771435a5fa5fb0b31c9827d",
          "body": "pricing: refresh vendored ai-price-index to v2026.06.17-2a11475.",
          "is_bot": false,
          "headline": "chore(release): v1.0.2",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-06-17T07:29:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a9a1e7601497c2f78345a9ee8c77cd3d04851b6",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.06.17-2a11475 (#25)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-17T07:29:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d25454cfbfa831d35bc2a306ea46ad4923b52fd6",
          "body": "pricing: refresh vendored ai-price-index to v2026.06.16-5063362.",
          "is_bot": false,
          "headline": "chore(release): v1.0.1",
          "author_name": "roninforge-bot",
          "author_login": null,
          "committed_at": "2026-06-16T17:14:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dc8eeb48b794de5db46c6fb48fc9ad621f3d29a",
          "body": "Co-authored-by: Solomonic <3539915+Solomonic@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(pricing): vendor ai-price-index v2026.06.16-5063362 (#24)",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-16T17:14:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e518d24493e5daf7ab4b53c6dbdc915017d0a940",
          "body": "…nore)\n\n`go run ./gen` failed with \"build constraints exclude all Go files\" because\ngen/main.go is //go:build ignore. Use `go run ./gen/main.go -fetch`, matching\nthe //go:generate directive. Surfaced by the first real ai-price-index\nrelease dispatch.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): pricing-bump runs the codegen via the file form (go:build ig…",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-16T17:09:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "48c5d6ea34e4afad308af6aa030ee8eeb227361d",
          "body": "…(#22)\n\nBumps [github.com/shirou/gopsutil/v4](https://github.com/shirou/gopsutil) from 4.26.4 to 4.26.5.\n- [Release notes](https://github.com/shirou/gopsutil/releases)\n- [Commits](https://github.com/shirou/gopsutil/compare/v4.26.4...v4.26.5)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/s\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump github.com/shirou/gopsutil/v4 from 4.26.4 to 4.26.5 …",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T09:57:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac0e9eec5121c53d76aef47a9a03dbe4df842a60",
          "body": "Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.51.0 to 1.52.0.\n- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)\n- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.51.0...v1.52.0)\n\n---\nupdated-dependencies:\n- dependency-name: modernc.org/sqlite\n  depende\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump modernc.org/sqlite from 1.51.0 to 1.52.0 (#21)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T09:57:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "da3499af472a7bc92dab7ec8030927085eee2608",
          "body": "…taset bump (#23)\n\npricing-bump.yml re-vendors a new dataset tag (go run ./gen -fetch), proves parity + golden vectors, and opens a pin-bump PR with a PAT so CI runs. pricing-merge-and-release.yml is a workflow_run merge-bot that merges the green same-repo pin-bump PR, bumps CHANGELOG, and pushes a \n[…]\nyml is removed (moved to the ai-price-index dataset repo, now the source of truth; its text referenced the removed baseRates map).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ci): auto re-vendor ai-price-index and cut a patch release on da…",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-16T09:44:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ed987419808efd00949ac10081a3394d479119d6",
          "body": "…in-time pricing\n\nPricing is now sourced from the open ai-price-index dataset (pinned release\nv2026.06.16-662bfa9), vendored at build time and embedded via codegen. Still\nzero-key, zero-latency, fully offline: no runtime network. A committed\ngenerator (internal/pricing/gen, go:build ignore) reads th\n[…]\n\n\nMIGRATION: after upgrading, run `budgetclaw backfill --rebuild` once to\nre-price existing rollups at their then-effective rates.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(pricing)!: source rates from vendored ai-price-index with point-…",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-16T05:47:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "99ecc270b2f88128b2429a9a8050fdeb94450041",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(lint): replace SQL where-clause concatenation with constant queries",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T16:21:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "61f38c4d06722b9332048a8dacda522c8886206f",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(lint): suppress gosec G101 false positive on env var name",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T16:12:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "152b2c286d3ec1f5495a88cef5b9d98af2a91d45",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(changelog): v0.1.9",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T15:50:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "41ddb166e6ef1964b2687ef4014d3b639771b0f4",
          "body": "Claude Code writes the same assistant API response across multiple\nJSONL lines (same message.id and requestId, distinct line uuids), so\nkeying events on the line uuid double or triple counted every\nresponse - a measured 2.5-2.85x cost overcount. Events with a message\nid now dedup on (message_id, request_id) with last-line-wins replace\nsemantics and delta-correct incremental rollups. Run backfill\n--rebuild once to clean an existing database.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(db): dedup events by message and request id",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T15:43:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "df72f4bf8429334c86d6d5270d784243829f21f2",
          "body": "Project labels are now bare repo names; branch travels in a dedicated\nspend-record field so Goei can group per-project without string\nsurgery. --no-branch omits the field so branches collapse server-side.\nUsage breakdown values are bare project names too.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(sync): send git branch as its own wire field",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T15:06:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d4c83377f7fe0e6a5363f3aed6dd548891e3575f",
          "body": "Adds `budgetclaw sync`: the zero-key path to a Goei web dashboard.\nbudgetclaw still only reads ~/.claude/projects/*.jsonl; sync transmits\naggregated dollar amounts and token counts per (project, branch, model,\nday) to Goei's device-token ingest endpoint. No Anthropic key is\ninvolved and no key leave\n[…]\n.\n\nVerified end-to-end against the live endpoint: 52 spend + 207 usage\nrecords landed, per-branch labels rendered, re-sync did not\ndouble-count.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(sync): push local Claude Code spend to a Goei dashboard",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T10:59:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7efe511521a5223380bd7eb4907824d84b1815a9",
          "body": null,
          "is_bot": false,
          "headline": "docs(readme): add cross-links to RoninForge tools and web tools",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T07:40:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "276c669762f2896eabf8d4891bc8343132661bbd",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T04:48:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "284aa807495f4a94f5dab23729dd39e06876434d",
          "body": "Fable 5 (claude-fable-5) is a new flagship tier above Opus, launched\n2026-06-09. Before this, Claude Code's Fable 5 events were silently\nskipped as an unknown model (verified against live local logs: 1000+\nclaude-fable-5 assistant events were going unpriced).\n\nPer decision 15i, re-verified every exi\n[…]\nccess\n(Project Glasswing), has no published API model ID, and never reaches\nClaude Code's JSONL, so it is intentionally not added.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(pricing): add Claude Fable 5 at $10/$50, re-verify all rates",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-06-10T04:41:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6878fe8964de0cc3b044d8a5c14bd65895f13b47",
          "body": "Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.50.1 to 1.51.0.\n- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)\n- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.50.1...v1.51.0)\n\n---\nupdated-dependencies:\n- dependency-name: modernc.org/sqlite\n  depende\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump modernc.org/sqlite from 1.50.1 to 1.51.0 (#20)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-06T07:18:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "165bf8b6a9e7877cb48e4fdab64791cf0bf94825",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(changelog): cut v0.1.7",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-05-29T07:01:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "136bcb2deabdd9496ed4610ef518357db72db94b",
          "body": "Claude Opus 4.8 shipped and was missing from the pricing table, so the\npipeline silently skipped it as an unknown model (62 real claude-opus-4-8\nevents were being dropped in local logs). Add it at $5/MTok input,\n$25/MTok output, the same tier as Opus 4.5/4.6/4.7.\n\nRe-verified every existing entry ag\n[…]\neds no separate entry.\n\nVerified end-to-end: backfill over real local logs now prices every\nevent with zero skipped-unknown-model.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(pricing): add Claude Opus 4.8 at $5/$25, re-verify all rates",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-05-29T06:59:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "537fa76c871d59fa72401d5d361cb54d2172321f",
          "body": "After v0.1.7-rc1 confirmed the auto-publish wiring works, guard the\ntap against future RC tags clobbering the production formula. Final\nrelease tags (no -rc / -beta suffix) still update the tap; prerelease\ntags now skip the brew step entirely.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(release): skip_upload: auto so prereleases bypass the tap",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-05-18T09:02:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "88002964589668d866225c209390c9727c5e9a69",
          "body": "Uncomment the brews block in .goreleaser.yaml and pipe the\nHOMEBREW_TAP_GITHUB_TOKEN secret into the goreleaser step in\nrelease.yml. Goreleaser now updates Formula/budgetclaw.rb on\nRoninForge/homebrew-tap on every v* tag, eliminating the manual\ncatch-up that left the tap five versions stale before v0.1.6.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(release): auto-publish Homebrew formula via goreleaser",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-05-18T08:58:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "157c6ee2b5ee4904ef7b55b5f18a6ef1d5c475ad",
          "body": "The Unreleased block previously held a mix of v0.1.4 and v0.1.5 content\nthat was never split when those releases were cut. Splits it correctly,\nadds v0.1.6 for the three dependency bumps, AGENTS.md, and the bundled\npricing-audit workflow.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(changelog): backfill v0.1.4 + v0.1.5 entries and add v0.1.6",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-05-18T08:42:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9b5a19371d3c09b144d7c845d98291f38b9e7a16",
          "body": "Resolves the conflict on Dependabot PR #17 by applying the bump on top of\nthe already-merged sqlite + gopsutil bumps.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "deps(deps): bump github.com/fsnotify/fsnotify from 1.9.0 to 1.10.1",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-05-18T08:40:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "08fedeb9c8b82b6aa4ca51322e7094c5f45ccbbd",
          "body": "Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.50.0 to 1.50.1.\n- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)\n- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.50.0...v1.50.1)\n\n---\nupdated-dependencies:\n- dependency-name: modernc.org/sqlite\n  depende\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump modernc.org/sqlite from 1.50.0 to 1.50.1 (#18)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-18T08:32:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5cc5b8d84b1f3928c9ac064e8e0069aeb40c6416",
          "body": "…(#15)\n\nBumps [github.com/shirou/gopsutil/v4](https://github.com/shirou/gopsutil) from 4.26.3 to 4.26.4.\n- [Release notes](https://github.com/shirou/gopsutil/releases)\n- [Commits](https://github.com/shirou/gopsutil/compare/v4.26.3...v4.26.4)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/s\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump github.com/shirou/gopsutil/v4 from 4.26.3 to 4.26.4 …",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-18T08:32:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bdc284d3f723b3e6b4b842cc8217220dade4e66b",
          "body": "Per the Agentic Engine Optimization framework: AGENTS.md tells coding agents\nhow to work in this repo (trust pledge, layout, build/test/lint, do-nots).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add AGENTS.md for AI coding agents",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-28T11:58:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "99b19b4dad0ba6d2125cb4b204297ebfae8f621b",
          "body": "A new-model launch on Anthropic's API typically coincides with\nprice cuts on older models in the same tier (Opus 4.7 launched and\n4.5/4.6 dropped to the new lower tier in the same release). Splitting\ndetection across two workflows would mean two issues for one event;\nbundling them gives the maintain\n[…]\ntection automated; rate values still require human verification\nbecause a wrong auto-merged rate would compromise the kill action.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: bundle model-audit + LiteLLM cross-check into one workflow",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-28T06:55:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cbf7e193a93bc43c4de214c9709e188c19914ead",
          "body": "Closes the gap the v0.1.4 incident exposed: the model-audit workflow\ncatches new model IDs (since /v1/models returns IDs), but cannot\ncatch price changes to existing IDs (since the same endpoint\nreturns no pricing). The Opus 4.5+ price cut from $15/$75 to $5/$25\nslipped past for ~3 weeks because we \n[…]\npic's Next.js SPA.\n\nDetection automated; rate verification stays human. A wrong\nauto-merged rate would compromise the kill action.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): pricing rates subcommand + daily LiteLLM cross-check workflow",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-28T06:48:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce2be54ce6515032eaf26b355d5b89237acd525f",
          "body": "…uild\n\nAnthropic moved Opus 4.5+ to a new lower tier ($5 input / $25 output\nper MTok) at some point after the original maintainer's pricing\nsnapshot on 2026-04-09. Prior releases inherited the pre-cut $15/$75\nrate by tier-pattern when adding 4.7 and the dated 4.5 variant.\n\nDiscovered by cross-checki\n[…]\nor the\n  same reason.\n\nAfter upgrading, `budgetclaw backfill --rebuild` recomputes every\nhistorical rollup at the corrected rates.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(pricing): correct Opus 4.5/4.6/4.7 to $5/$25 + add backfill --reb…",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-28T06:35:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d420ead4cc78b738e9db18f7d69414c1c778f81",
          "body": "The pricing-audit workflow has shipped and runs daily. Surface that\nin two places:\n- A new bullet in \"What it does\" naming the daily audit.\n- A new \"Pricing freshness\" section explaining the detection vs\n  verification split, pointing at pricing diagnose / backfill, and\n  linking the workflow file.\n\nHonest framing: detection is automated, pricing is verified by hand.\nAuto-merging a price would compromise the kill action.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): add Pricing freshness section + daily-audit selling point",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-28T05:54:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "415192794c17663a5e2bb29d604d6dbb8df3df08",
          "body": "Three follow-ups to v0.1.2:\n\n- Add `budgetclaw backfill`: walks $HOME/.claude/projects/**/*.jsonl,\n  prices every assistant event, inserts via DB.Insert (which is\n  idempotent on uuid). Use after upgrading to a release that adds\n  pricing for previously-unknown models. Verified locally against\n  45,\n[…]\nlow: it said\n  \"weekly\" because the cron was originally weekly, but v0.1.2\n  flipped it to daily without updating the body string.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): backfill subcommand + 2 missing dated Opus variants",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-28T05:39:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "17d096b4b60922a09d8b080e493776878e5e1d1a",
          "body": "filepath.WalkDir + os.Open in the callback is flagged by gosec G122\nas a TOCTOU symlink-race. The user's $HOME/.claude/projects tree is\non a trusted local FS so the practical risk is nil, but the boundary\ncosts nothing and silences the lint rule cleanly.\n\nSwitch to os.OpenRoot + root.FS()/root.Open so every file read is\nconstrained to the scan root. Behavior is identical for callers; the\nreleased v0.1.2 binary is unaffected.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(cli): use os.Root in pricing diagnose to satisfy gosec G122",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-28T05:15:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b88e33bf1ef2ff9985f95ccb330bcc5477bbe30",
          "body": "The static pricing table did not include claude-opus-4-7, so the\nwatcher logged \"pricing: unknown model\" once per Opus 4.7 event and\nsilently skipped them. Real-world impact at the time of fix: the\nmaintainer's logs contained 8914 dropped events; rollups stayed at\n$0 and kill-action caps could not f\n[…]\ncompromise the kill action.\n\nAfter upgrading, run `budgetclaw backfill` to re-attribute Opus 4.7\nevents the prior watcher dropped.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(pricing): recognize claude-opus-4-7 and add drift-detection tools",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-28T05:10:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "79d39f25d71266f4796e5d52d2053cc0025dad57",
          "body": "Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.48.2 to 1.50.0.\n- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)\n- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.48.2...v1.50.0)\n\n---\nupdated-dependencies:\n- dependency-name: modernc.org/sqlite\n  depende\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps(deps): Bump modernc.org/sqlite from 1.48.2 to 1.50.0 (#13)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-28T05:09:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "01342963d599d9276d20a865b2c08a0f116542ba",
          "body": null,
          "is_bot": false,
          "headline": "docs: add Homebrew install option",
          "author_name": "Solomonic",
          "author_login": null,
          "committed_at": "2026-04-27T13:10:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfc7d9eede462f6ca9e7fb9e2b53eef3382b4d5d",
          "body": "…ns/setup-go-6\n\nci(deps): Bump actions/setup-go from 5 to 6",
          "is_bot": false,
          "headline": "Merge pull request #4 from RoninForge/dependabot/github_actions/actio…",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-04-13T09:27:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dd2e2b0ba9cf12423ec377059a345b20328edb0",
          "body": "Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-go/releases)\n- [Commits](https://github.com/actions/setup-go/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-go\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): Bump actions/setup-go from 5 to 6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-13T09:13:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1533fa3eb71382bdaf7207efac94b42922cd5206",
          "body": "…ons/checkout-6\n\nci(deps): Bump actions/checkout from 4 to 6",
          "is_bot": false,
          "headline": "Merge pull request #10 from RoninForge/dependabot/github_actions/acti…",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-04-13T09:12:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "552d860b41d0372add28b64d21b6accd251a6952",
          "body": "…om/spf13/cobra-1.10.2\n\ndeps(deps): Bump github.com/spf13/cobra from 1.8.1 to 1.10.2",
          "is_bot": false,
          "headline": "Merge pull request #11 from RoninForge/dependabot/go_modules/github.c…",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-04-13T09:12:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b3aeadecbf5f84072a313fb079a3cff2af4ab0b",
          "body": "Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.8.1 to 1.10.2.\n- [Release notes](https://github.com/spf13/cobra/releases)\n- [Commits](https://github.com/spf13/cobra/compare/v1.8.1...v1.10.2)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/spf13/cobra\n  dependency-version: 1.10.2\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps): Bump github.com/spf13/cobra from 1.8.1 to 1.10.2",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-13T08:06:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1a8fcf654d700b1b67c42f9888b3a5ba2509988",
          "body": "…easer/goreleaser-action-7\n\nci(deps): Bump goreleaser/goreleaser-action from 6 to 7",
          "is_bot": false,
          "headline": "Merge pull request #6 from RoninForge/dependabot/github_actions/gorel…",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-04-13T08:05:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bba3526684357158a6313b47febed625c61cb09d",
          "body": "…ns/upload-artifact-7\n\nci(deps): Bump actions/upload-artifact from 4 to 7",
          "is_bot": false,
          "headline": "Merge pull request #8 from RoninForge/dependabot/github_actions/actio…",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-04-13T08:05:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "770ba9a7d3b294d05994e77a96cdd97c5b24e4a2",
          "body": "…b/codeql-action-4\n\nci(deps): Bump github/codeql-action from 3 to 4",
          "is_bot": false,
          "headline": "Merge pull request #7 from RoninForge/dependabot/github_actions/githu…",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-04-13T08:05:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07b102d058f732d16ff573b2f14f07acfe29783f",
          "body": "…rg/sqlite-1.48.2\n\ndeps(deps): Bump modernc.org/sqlite from 1.48.1 to 1.48.2",
          "is_bot": false,
          "headline": "Merge pull request #9 from RoninForge/dependabot/go_modules/modernc.o…",
          "author_name": "Jens Krause",
          "author_login": "Solomonic",
          "committed_at": "2026-04-13T08:05:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2149faa3fcb81ccfb88f52fdb625655b09ea42e2",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v6)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): Bump actions/checkout from 4 to 6",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-12T23:05:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8d3e2c68f3911065d8883b908417359db56b1e94",
          "body": "Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.48.1 to 1.48.2.\n- [Changelog](https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md)\n- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.48.1...v1.48.2)\n\n---\nupdated-dependencies:\n- dependency-name: modernc.org/sqlite\n  dependency-version: 1.48.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps): Bump modernc.org/sqlite from 1.48.1 to 1.48.2",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-12T23:05:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6a299707a42efab9c121ae852f1fccc1aa187b9",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifact\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): Bump actions/upload-artifact from 4 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-12T23:05:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a702261cd9d37b812f7b236d5a48622ba3e3af3",
          "body": "Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.\n- [Release notes](https://github.com/github/codeql-action/releases)\n- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/github/codeql-action/compare/v3...v4)\n\n-\n[…]\ndependency-name: github/codeql-action\n  dependency-version: '4'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): Bump github/codeql-action from 3 to 4",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-12T23:05:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e7e2847875c67c5ebe2145a176fd7405b36592cf",
          "body": "Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 6 to 7.\n- [Release notes](https://github.com/goreleaser/goreleaser-action/releases)\n- [Commits](https://github.com/goreleaser/goreleaser-action/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: goreleaser/goreleaser-action\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): Bump goreleaser/goreleaser-action from 6 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-12T23:05:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "831afa8965e242dbc1f89456df44c76160c83468",
          "body": "The test used real time.Now() for the lock expiry check but the\nsample event's timestamp was fixed at 2026-04-09. After that date,\nthe lock's ExpiresAt (end of day 2026-04-09) was in the past, so\nCheckLocked auto-released it and the second event re-evaluated\ninstead of short-circuiting via the lock path.\n\nFix: inject p.Now returning a time within the event's period.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(budgetclaw): pin clock in TestHandleAlreadyLockedReKills",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-10T03:03:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad1432b24b81e70ccc85faf3867ce2d1538ce7eb",
          "body": "- README: add \"Phone alerts via ntfy\" section with 5-step setup guide\n- Landing: ntfy setup instructions in BudgetClaw feature list\n- Landing: email capture form (Formspree) with enso divider\n- Landing: use correct logo (master PNG, not white-on-transparent)\n- Landing: expanded feature bullets (SIGTERM + lockfile detail)\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add ntfy setup docs, email capture, and landing polish",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-10T02:57:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "267c8549979309612346082fdd01fb6deec15b05",
          "body": "Code quality:\n- Add missing model variants (claude-sonnet-4-5, claude-opus-4-5) to\n  pricing table to prevent silent event drops\n- Update all URLs from devs.army/get to roninforge.org/get (README,\n  CONTRIBUTING, CHANGELOG, goreleaser, install.sh, plugin hooks)\n- Update CONTRIBUTING code layout to m\n[…]\nronin logo rendered properly (brightness filter fix)\n- Enso circle as section divider\n- Product card grid ready for multiple tools\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(budgetclaw): code review fixes + landing redesign for v0.1.0 release",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-09T13:10:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6a73799c0651fb731a54411c0a99dcb69e44970d",
          "body": "…ion hook\n\n- plugin.json manifest for marketplace submission\n- /spend skill runs budgetclaw status, limit list, locks list\n- SessionStart hook prints spend summary or install notice\n- Plugin installable via `claude plugin install ./plugin`\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(budgetclaw): add Claude Code plugin with /spend command and sess…",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-09T10:11:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aeb3de5236285be485d5df8896afd04686caf9d8",
          "body": "Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(budgetclaw): tighten db dir permissions 0755 -> 0750 (gosec G301)",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-09T07:52:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "117f8f0ef68b28435d19620221ff33c1b1dbcbc3",
          "body": "…port\n\nAction v6 rejects golangci-lint v2.x with \"not supported, update to v7+\".\nBump to v9 (latest) which natively supports v2 and Go 1.25. Resolves the\nCI lint failure caused by go.mod targeting Go 1.25 while v1.64.8 was built\nwith Go 1.24.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(budgetclaw): bump golangci-lint-action v6 -> v9 for v2 linter sup…",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-09T07:50:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "38418d6ac38a81af1a29edd0c320108c71c4c413",
          "body": "golangci-lint v1.64.8 (resolved by `version: latest` on action v6)\nis built with Go 1.24, which errors when our go.mod targets 1.25.\nPin to v2.11.4 which is built with Go 1.25+.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(budgetclaw): pin golangci-lint to v2.11.4 for Go 1.25 compat",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-09T07:47:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a78585a10ffdceb315e3e20650f48c16b7ba05d9",
          "body": "- errcheck: exclude fmt.Fprint* from errcheck (CLI stdout writes)\n- errcheck: suppress in test files\n- gosec G301: tighten dir perms from 0755 to 0750\n- gosec G306/G302: tighten file perms from 0644 to 0600\n- revive: add comment to exported gopsutilSource.Processes method\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(budgetclaw): resolve golangci-lint CI failures",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-09T07:34:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f25ec3b66e6e6c7f581c9ba2d56a20d58b19aa5b",
          "body": "…rcer, ntfy, watcher, 10 commands\n\nFull local spend-monitor for Claude Code. Watches ~/.claude/projects/*.jsonl,\nattributes per-tool-call token cost to project + git-branch, enforces budget\ncaps via SIGTERM, pushes phone alerts via ntfy. Zero key, zero prompts, zero\nlatency added.\n\nPackages (12 inte\n[…]\nn\n- version:  ldflags + runtime/debug.ReadBuildInfo fallback\n\n40 Go source files, all tests pass with race detector, go vet clean.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(budgetclaw): complete v0 CLI — parser, pricing, db, budget, enfo…",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-09T07:11:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7eecef817eb3342d591f1f602dd4d0c4a80c4987",
          "body": "Sibling to MyPeeps.ai with clean folder separation. Strategy docs\nextracted from Claude memory pool. Infra config rsync'd from the live\nVPS (204.168.172.83) for version control. Placeholder dirs for\napps/landing-roninforge, apps/landing-devsarmy, tools/budgetclaw,\nservices/hub to be scaffolded in la\n[…]\nps styles\nfrom leaking into this venture's dev-tool aesthetic.\n\nPhase 0 complete, Phase 1a-1c complete. Show HN target 2026-04-22.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: Initial project scaffold for RoninForge.org venture",
          "author_name": "solomonic",
          "author_login": "Solomonic",
          "committed_at": "2026-04-08T17:34:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 30,
      "commits_last_year": 97,
      "latest_release_at": "2026-07-22T09:11:23Z",
      "latest_release_tag": "v1.4.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 11,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 2.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/RoninForge/budgetclaw",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/RoninForge/budgetclaw",
          "is_deprecated": false,
          "latest_version": "v1.4.0",
          "repository_url": "https://github.com/RoninForge/budgetclaw",
          "versions_count": 30,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-22T09:09:14Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 7,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 3
    },
    "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": [
        "go.mod"
      ],
      "largest_source_bytes": 25704,
      "source_files_sampled": 64,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 6426
    },
    "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/BurntSushi/toml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/fsnotify/fsnotify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.1"
        },
        {
          "name": "github.com/shirou/gopsutil/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.26.5"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.53.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 3,
        "merged_prs": 34,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 2,
        "closed_unmerged_prs": 4
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "Solomonic",
          "commits": 69,
          "avatar_url": "https://avatars.githubusercontent.com/u/3539915?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "codeql.yml",
        "pricing-bump.yml",
        "pricing-merge-and-release.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "10 out of 10 merged PRs checked by a CI test -- score normalized to 10",
            "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/27 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a8c15d375844a3831acc40750d112b0aff6cf75f",
        "ran_at": "2026-07-22T10:19:36Z",
        "aggregate_score": 5.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T09:11:45Z",
      "oldest_open_prs": [
        {
          "number": 37,
          "created_at": "2026-07-05T23:03:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 41,
          "created_at": "2026-07-19T23:03:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 42,
          "created_at": "2026-07-19T23:03:58Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-20T02:53:36Z",
      "ci_last_conclusion": "SKIPPED",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/RoninForge/budgetclaw",
    "host": "github.com",
    "name": "budgetclaw",
    "owner": "RoninForge"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 67,
      "inputs": {
        "security": 58,
        "vitality": 79,
        "community": 50,
        "governance": 55,
        "engineering": 90
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 79,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "commits_last_year": 97,
              "human_commit_share": 0.837,
              "days_since_last_push": 0,
              "active_weeks_last_year": 11
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "11/52 weeks with commits",
                "points": 7.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 11
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "97 commits in the last year",
                "points": 17.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 97
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 30,
              "latest_release_tag": "v1.4.0",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 2.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "30 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "forks": 0,
              "stars": 7,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "7 stars",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 55,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "merged_prs": 34,
              "open_issues": 0,
              "closed_issues": 2,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 4
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "34/38 decided PRs merged",
                "points": 34.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 34,
                      "decided": 38
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/27 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "RoninForge",
              "public_repos": 34,
              "account_age_days": 104
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of RoninForge",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "RoninForge"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "34 public repos, account ~0 yr old",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 34
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/RoninForge/budgetclaw"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "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 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "30 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 90,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "10 out of 10 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "ai-dev-tools",
                "budget-monitor",
                "claude-code",
                "claude-code-plugin",
                "cli-tool",
                "cost-monitoring",
                "developer-tools",
                "open-source",
                "spend-tracking",
                "token-usage",
                "ccusage",
                "claude-max",
                "cost-dashboard",
                "team",
                "usage-tracking"
              ],
              "has_wiki": false,
              "homepage": "https://roninforge.org/budgetclaw",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://roninforge.org/budgetclaw",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "15 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 58,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 5.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "10 out of 10 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/27 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.988,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 6426
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "81 of 82 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 81,
                      "sampled": 82
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 90,
            "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": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.49,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0.163
            },
            "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": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "48 of the last 98 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 48,
                      "sampled": 98
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "16 of the last 98 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 16,
                      "sampled": 98
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 25704,
              "source_files_sampled": 64,
              "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/64 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 64,
                      "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T10:19:47.108072Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/RoninForge/budgetclaw.svg",
  "full_name": "RoninForge/budgetclaw",
  "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.26.0 — metodología completa · wiki de métricas.

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