Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-29 23:12 UTC

amarbel-llc / purse-first

Nix package framework plus the go-mcp and dewey Go libraries: build self-describing, composable CLI/MCP-server/skill packages for agentic tooling — read-only mirror of code.linenisgreat.com/purse-first

MDX · GoMIT★ 1 estrella⑂ 0 forksdesde feb 2026Ver en GitHub ↗

amarbel-llc/purse-first tiene un índice de salud de 57 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (88/100) y la más baja, Community & Adoption (24/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

57
global / 100
Moderado

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

amarbel llcOrganización
0 seguidores56 repositorios públicosdesde feb 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
Gocode.linenisgreat.com/purse-firstv0.5.0-14hace 9 días

Métricas por categoría

Vitalidad

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

88Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
15.9/36Cadencia de commits — 23/52 semanas con commits
18/18Volumen de commits — 1016 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_year1016
human_commit_share1
days_since_last_push0
active_weeks_last_year23
Cómo se puntúa
27/27Publica versiones — 17 versiones publicadas
36/36Recencia de las versiones — última versión hace 26 días
27/27Cadencia de publicación — una versión cada ~3,7 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count17
latest_release_tagv0.4.1
releases_from_tagsno
days_since_latest_release26
mean_days_between_releases3,7
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

24Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 1 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

49En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.9/22.5Distribución de commits — el principal contribuyente firma el 96% de los commits
4.1/13.5Amplitud de contribuyentes — 3 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled3
top_contributor_share0,962
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
28.7/38.3Aceptación de PR — 3/4 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs3
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs1
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
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 amarbel-llc
13.7/25Trayectoria — 56 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_loginamarbel-llc
public_repos56
account_age_days169
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 9 días
20/20Historial de versiones — 14 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagescode.linenisgreat.com/purse-first
ecosystemsgo
any_deprecatedno
min_days_since_publish9

Calidad de Ingeniería

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

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

Documentación

85Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 7 topics
10/10Wiki
Datos de entrada utilizados
topicsclaude-code, golang, mcp, nix-flake, package-framework, plugin-system, rust
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

31En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 16 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3,1
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, packaging, signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

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

66Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md, libs/dewey/CLAUDE.md, libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md, libs/dewey/internal/0/bech32/CLAUDE.md, libs/dewey/internal/0/box_chars/CLAUDE.md, libs/dewey/internal/0/equality/CLAUDE.md, libs/dewey/internal/0/exec/CLAUDE.md, libs/dewey/internal/0/flag_policy/CLAUDE.md, libs/dewey/internal/0/hecks/CLAUDE.md, libs/dewey/internal/0/http_statuses/CLAUDE.md, libs/dewey/internal/0/interfaces/CLAUDE.md, libs/dewey/internal/0/primordial/CLAUDE.md, libs/dewey/internal/0/reset/CLAUDE.md, libs/dewey/internal/0/stack_frame/CLAUDE.md, libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md, libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md, libs/dewey/internal/alfa/cmp/CLAUDE.md, libs/dewey/internal/alfa/collections_coding/CLAUDE.md, libs/dewey/internal/alfa/collections_map/CLAUDE.md, libs/dewey/internal/alfa/equals/CLAUDE.md, libs/dewey/internal/alfa/pool/CLAUDE.md, libs/dewey/internal/alfa/quiter_collection/CLAUDE.md, libs/dewey/internal/alfa/quiter_seq/CLAUDE.md, libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md, libs/dewey/internal/alfa/unicorn/CLAUDE.md, libs/dewey/internal/bravo/collections_slice/CLAUDE.md, libs/dewey/internal/bravo/errors/CLAUDE.md, libs/dewey/internal/charlie/comments/CLAUDE.md, libs/dewey/internal/charlie/delim_reader/CLAUDE.md, libs/dewey/internal/charlie/env_vars/CLAUDE.md, libs/dewey/internal/charlie/expansion/CLAUDE.md, libs/dewey/internal/charlie/flags/CLAUDE.md, libs/dewey/internal/charlie/lua/CLAUDE.md, libs/dewey/internal/charlie/ohio/CLAUDE.md, libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md, libs/dewey/internal/charlie/quiter/CLAUDE.md, libs/dewey/internal/charlie/quiter_set/CLAUDE.md, libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md, libs/dewey/internal/charlie/ui/CLAUDE.md, libs/dewey/internal/charlie/values/CLAUDE.md, libs/dewey/internal/delta/catgut/CLAUDE.md, libs/dewey/internal/delta/cli/CLAUDE.md, libs/dewey/internal/delta/collections/CLAUDE.md, libs/dewey/internal/delta/collections_ptr/CLAUDE.md, libs/dewey/internal/delta/collections_value/CLAUDE.md, libs/dewey/internal/delta/delim_io/CLAUDE.md, libs/dewey/internal/delta/files/CLAUDE.md, libs/dewey/internal/delta/format/CLAUDE.md, libs/dewey/internal/delta/heap/CLAUDE.md, libs/dewey/internal/delta/script_config/CLAUDE.md, libs/dewey/internal/delta/thyme/CLAUDE.md, libs/dewey/internal/delta/tridex/CLAUDE.md, libs/dewey/internal/delta/trie/CLAUDE.md, libs/dewey/internal/delta/xdg_defaults/CLAUDE.md, libs/dewey/internal/echo/age/CLAUDE.md, libs/dewey/internal/echo/alfred/CLAUDE.md, libs/dewey/internal/echo/collections_delta/CLAUDE.md, libs/dewey/internal/echo/command/CLAUDE.md, libs/dewey/internal/echo/debug/CLAUDE.md, libs/dewey/internal/echo/editor/CLAUDE.md, libs/dewey/internal/echo/ohio_files/CLAUDE.md, libs/dewey/internal/echo/script_value/CLAUDE.md, libs/dewey/internal/echo/xdg/CLAUDE.md, libs/dewey/internal/foxtrot/config_cli/CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
37.3/40Historial de commits legible — 70 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,7
agent_instruction_filesCLAUDE.md, libs/dewey/CLAUDE.md, libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md, libs/dewey/internal/0/bech32/CLAUDE.md, libs/dewey/internal/0/box_chars/CLAUDE.md, libs/dewey/internal/0/equality/CLAUDE.md, libs/dewey/internal/0/exec/CLAUDE.md, libs/dewey/internal/0/flag_policy/CLAUDE.md, libs/dewey/internal/0/hecks/CLAUDE.md, libs/dewey/internal/0/http_statuses/CLAUDE.md, libs/dewey/internal/0/interfaces/CLAUDE.md, libs/dewey/internal/0/primordial/CLAUDE.md, libs/dewey/internal/0/reset/CLAUDE.md, libs/dewey/internal/0/stack_frame/CLAUDE.md, libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md, libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md, libs/dewey/internal/alfa/cmp/CLAUDE.md, libs/dewey/internal/alfa/collections_coding/CLAUDE.md, libs/dewey/internal/alfa/collections_map/CLAUDE.md, libs/dewey/internal/alfa/equals/CLAUDE.md, libs/dewey/internal/alfa/pool/CLAUDE.md, libs/dewey/internal/alfa/quiter_collection/CLAUDE.md, libs/dewey/internal/alfa/quiter_seq/CLAUDE.md, libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md, libs/dewey/internal/alfa/unicorn/CLAUDE.md, libs/dewey/internal/bravo/collections_slice/CLAUDE.md, libs/dewey/internal/bravo/errors/CLAUDE.md, libs/dewey/internal/charlie/comments/CLAUDE.md, libs/dewey/internal/charlie/delim_reader/CLAUDE.md, libs/dewey/internal/charlie/env_vars/CLAUDE.md, libs/dewey/internal/charlie/expansion/CLAUDE.md, libs/dewey/internal/charlie/flags/CLAUDE.md, libs/dewey/internal/charlie/lua/CLAUDE.md, libs/dewey/internal/charlie/ohio/CLAUDE.md, libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md, libs/dewey/internal/charlie/quiter/CLAUDE.md, libs/dewey/internal/charlie/quiter_set/CLAUDE.md, libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md, libs/dewey/internal/charlie/ui/CLAUDE.md, libs/dewey/internal/charlie/values/CLAUDE.md, libs/dewey/internal/delta/catgut/CLAUDE.md, libs/dewey/internal/delta/cli/CLAUDE.md, libs/dewey/internal/delta/collections/CLAUDE.md, libs/dewey/internal/delta/collections_ptr/CLAUDE.md, libs/dewey/internal/delta/collections_value/CLAUDE.md, libs/dewey/internal/delta/delim_io/CLAUDE.md, libs/dewey/internal/delta/files/CLAUDE.md, libs/dewey/internal/delta/format/CLAUDE.md, libs/dewey/internal/delta/heap/CLAUDE.md, libs/dewey/internal/delta/script_config/CLAUDE.md, libs/dewey/internal/delta/thyme/CLAUDE.md, libs/dewey/internal/delta/tridex/CLAUDE.md, libs/dewey/internal/delta/trie/CLAUDE.md, libs/dewey/internal/delta/xdg_defaults/CLAUDE.md, libs/dewey/internal/echo/age/CLAUDE.md, libs/dewey/internal/echo/alfred/CLAUDE.md, libs/dewey/internal/echo/collections_delta/CLAUDE.md, libs/dewey/internal/echo/command/CLAUDE.md, libs/dewey/internal/echo/debug/CLAUDE.md, libs/dewey/internal/echo/editor/CLAUDE.md, libs/dewey/internal/echo/ohio_files/CLAUDE.md, libs/dewey/internal/echo/script_value/CLAUDE.md, libs/dewey/internal/echo/xdg/CLAUDE.md, libs/dewey/internal/foxtrot/config_cli/CLAUDE.md
agent_instruction_max_bytes16.698
Cómo se puntúa
18/18Arranque con un solo comando — justfile, libs/go-mcp/justfile, zz-tests_bats/rfc-0001/justfile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
0/11Verificación estática de tipos
10/10Entorno reproducible — Nix, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nix
has_tests
lockfilesgo.sum
has_dockerfileno
typed_languageno
bootstrap_filesjustfile, libs/go-mcp/justfile, zz-tests_bats/rfc-0001/justfile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifestscmd/golangci-lint-dewey/go.mod, go.mod, libs/dewey/go.mod, libs/go-mcp/command/huh/go.mod, libs/go-mcp/go.mod
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — MDX sin configuración de verificación de tipos
54.8/55Tamaños de archivo manejables — 2/730 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageMDX
largest_source_bytes92.665
source_files_sampled730
oversized_source_files2
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signal
api_schema_files

Datos clave

1estrellas de GitHub
3contribuidores
1016commits en los últimos 12 meses
0días desde el último push
17versiones 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 3.1 / 10
3.1agregado

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-29 23:12 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities16 existing vulnerabilities detected
Dependencias directas 2
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/BurntSushi/tomlv1.6.0go.mod
Gogithub.com/spf13/cobrav1.10.2go.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": [
        "claude-code",
        "golang",
        "mcp",
        "nix-flake",
        "package-framework",
        "plugin-system",
        "rust"
      ],
      "is_fork": false,
      "size_kb": 4458,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1890187,
        "Lua": 812,
        "MDX": 2288531,
        "Nix": 51260,
        "Just": 32395,
        "Roff": 46916,
        "Shell": 27759,
        "TypeScript": 267124
      },
      "pushed_at": "2026-07-29T13:41:29Z",
      "created_at": "2026-02-14T16:09:44Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-29T13:43:37Z",
      "description": "Nix package framework plus the go-mcp and dewey Go libraries: build self-describing, composable CLI/MCP-server/skill packages for agentic tooling — read-only mirror of code.linenisgreat.com/purse-first",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "MDX",
      "significant_languages": [
        "MDX",
        "Go"
      ]
    },
    "owner": {
      "blog": "amarbel.net",
      "name": "amarbel llc",
      "type": "Organization",
      "login": "amarbel-llc",
      "company": null,
      "location": "United States of America",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/260668089?v=4",
      "created_at": "2026-02-10T12:45:42Z",
      "is_verified": null,
      "public_repos": 56,
      "account_age_days": 169
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-07-03T14:21:23Z"
        },
        {
          "tag": "v0.3.4",
          "kind": "patch",
          "published_at": "2026-06-19T17:00:53Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2026-06-19T14:30:02Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-06-11T11:43:09Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-06-08T00:00:25Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-06-06T22:05:12Z"
        },
        {
          "tag": "v0.2.9",
          "kind": "patch",
          "published_at": "2026-06-04T18:14:07Z"
        },
        {
          "tag": "v0.2.8",
          "kind": "patch",
          "published_at": "2026-06-01T00:41:11Z"
        },
        {
          "tag": "v0.2.7",
          "kind": "patch",
          "published_at": "2026-05-31T23:19:51Z"
        },
        {
          "tag": "v0.2.6",
          "kind": "patch",
          "published_at": "2026-05-31T01:43:44Z"
        },
        {
          "tag": "v0.2.5",
          "kind": "patch",
          "published_at": "2026-05-29T12:11:56Z"
        },
        {
          "tag": "libs/dewey/v0.2.4",
          "kind": "other",
          "published_at": "2026-05-27T21:14:23Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2026-05-26T20:27:05Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-05-25T11:19:25Z"
        },
        {
          "tag": "libs/dewey/v0.2.2",
          "kind": "other",
          "published_at": "2026-05-25T11:19:12Z"
        },
        {
          "tag": "libs/dewey/v0.2.1",
          "kind": "other",
          "published_at": "2026-05-24T18:05:53Z"
        },
        {
          "tag": "libs/dewey/v0.2.0",
          "kind": "other",
          "published_at": "2026-05-23T21:39:29Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c1ced82d4ee85784a718a7130c7c3960e7d692b1",
          "body": "A filename broken across a line read as \"printer_null_ test.go\", and the\ndiscard-surface comment still claimed js has no /dev/null handle -- which the\nnode-hosted run disproves, and which the file's own header already corrects.\n\n:clown: Clown 0.4.2+a662dea\nhttps://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
          "is_bot": false,
          "headline": "dewey/ui: fix two inaccurate comments in the Null wasm test",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-29T13:34:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56bf3104f49d69838b473693311a36c464375b72",
          "body": "internal/charlie/ui opened os.DevNull in a package init() and panicked on\nfailure. Anywhere the open fails, that killed the binary during package\ninitialization, before main() ran -- taking down every js/wasm module whose\nimport graph reached this package. Found downstream in papi#62, whose\nbrowser-\n[…]\nw covers\ninternal/charlie/ui and pkgs/ui, both of which cross-build clean.\n\nCloses #177\n\n:clown: Clown 0.4.2+a662dea\nhttps://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
          "is_bot": false,
          "headline": "dewey/ui: lazy-init Null's /dev/null handle so js/wasm can import it",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-29T13:33:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "439984ec862889e0c436c268785a070c9b2398a6",
          "body": "Separate from the #173 SIGHUP fix, and dropping this commit leaves that\nfix intact.\n\nFound while verifying #173: once SIGHUP was resolved, GOOS=js still\nfailed on `internal/delta/files/chflags.go: undefined: setUserChanges`.\n#172 added a wasip1-only stub, but the underlying gap — chflags.go\ndispatch\n[…]\nVerified: the widened default list builds clean for both GOOS=js and\nGOOS=wasip1 at GOARCH=wasm.\n\nRefs #172\n\n:clown: https://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
          "is_bot": false,
          "headline": "dewey/files: add js stub for setUserChanges",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-29T10:41:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8676091c70292002c70cb76d8b8a3db523448500",
          "body": "`ContextSetCancelOnSIGHUP` referenced `syscall.SIGHUP`, which GOOS=js\ndoes not define — syscall_js.go declares only SIGCHLD, SIGINT, SIGKILL,\nSIGTRAP, SIGQUIT and SIGTERM. Every package reaching dewey's errors\ncontext (a wide surface) therefore failed to build for js/wasm.\n\nMove only that function i\n[…]\nt-dewey` passes natively with no\nfailures, including TestContextSignal's real SIGHUP delivery.\n\nCloses #173\n\n:clown: https://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
          "is_bot": false,
          "headline": "dewey/errors: build-tag SIGHUP out for js/wasm",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-29T10:41:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "25389a78677704fe951de1627ad161ce17cd9a81",
          "body": "`chflags.go` calls setUserChanges via platform-specific files with no\nstub for GOOS=wasip1, so any package importing pkgs/files (or reaching\nit transitively) fails to build for wasm/wasi. Mirror the existing\nchflags_linux.go no-op convention (filename-suffix build constraint,\nno explicit //go:build \n[…]\nsue (internal/bravo/errors/context.go: undefined:\nsyscall.SIGHUP) — out of scope for this fix.\n\nCloses #172\n\n:clown: https://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
          "is_bot": false,
          "headline": "dewey/files: add wasip1 stub for setUserChanges",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-29T09:58:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81bb9459712117bc554b47b53e6c63ba2e8a8cc9",
          "body": "Lowercase the pre-existing single-line descriptions and drop their\ntrailing periods, so the --list column reads as one uniform list\nrather than two styles side by side. Where such a comment was two\nsentences, the extra sentence moves above a bare `#` separator.\n\nAlso rewrite descriptions that satisf\n[…]\nnot. The linter checks that a\nsummary stands alone, never that it says anything.\n\nSigned-off-by: Clown 0.4.2+0201796\nhttps://code.linenisgreat.com/clown/commit/02017963c3ed4f5a3354c7d2ccfcd5305695142e",
          "is_bot": false,
          "headline": "justfile: normalize --list summary style",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-28T14:34:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d0b832eca308eca3daefe701437c3ca4d184f35",
          "body": "`just --list` shows only the last comment line above a recipe, so\nmulti-line comment blocks were surfacing their tail as the\ndescription. Insert a bare `#` separator above a written one-line\nsummary, per conformist-justfile(7) RECIPE DESCRIPTIONS. Prose is\npreserved above the separator.\n\nSigned-off-by: Clown 0.4.2+0201796\nhttps://code.linenisgreat.com/clown/commit/02017963c3ed4f5a3354c7d2ccfcd5305695142e",
          "is_bot": false,
          "headline": "justfile: give every recipe a standalone --list summary",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-28T14:12:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d93c2594fa7eeb9b6b4adc0992e3aa7c6de1bddc",
          "body": "…st#171)\n\nA clean check now says so explicitly in both exporters — Go:\n\"pkgs/ in sync with internal/ (N facade files checked)\"; rust mode\nmirrored — so green output is distinguishable from a compare that\nsilently never ran (the masked-skip suspicion that forced eng's #44\nmutation test). diffFacadeTr\n[…]\nated:\" lines for one file read\nas a bug.\n\ngo build + dagnabit/dagnabit_rust test suites + checks.formatting green.\n\nSigned-off-by: Clown 0.3.22+dirty <https://code.linenisgreat.com/clown/commit/dirty>",
          "is_bot": false,
          "headline": "dagnabit: print a positive verdict on clean export --check (purse-fir…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-22T20:42:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dbe6d87fc660ea8f673df38d8d7895699cc7b446",
          "body": null,
          "is_bot": false,
          "headline": "bump transitive flake inputs",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-21T16:15:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "679aa4bad05b7f4c2c72abc4a10b572083a825a4",
          "body": "…ep #20)\n\nFollow-up: one missed gomod2nix fork link in CLAUDE.md.\n\nSigned-off-by: Clown 0.3.22+dirty <https://code.linenisgreat.com/clown/commit/dirty>",
          "is_bot": false,
          "headline": "docs: repoint living-doc URLs to code.linenisgreat.com (fleet doc swe…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-20T20:49:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86273c2a8c3bac05c2d1a0decb640fc1a73c1f08",
          "body": "…ep #20)\n\nSigned-off-by: Clown 0.3.22+dirty <https://code.linenisgreat.com/clown/commit/dirty>",
          "is_bot": false,
          "headline": "docs: repoint living-doc URLs to code.linenisgreat.com (fleet doc swe…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-20T20:42:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20f89c28ebf95f9ed6bab2f13101d7af8d27cb03",
          "body": "…reat.com/purse-first\n\nWave-3 leg A2 (docs/plans/2026-07-19-go-module-rename-playbook.md): rename\nall five purse-first Go modules in one commit via the PREFIX pair\ngithub.com/amarbel-llc/purse-first -> code.linenisgreat.com/purse-first\n(root, libs/dewey, libs/go-mcp, libs/go-mcp/command/huh,\ncmd/gol\n[…]\nE_FIRST_VERSION 0.4.1 -> 0.5.0 (minor bump for the\n  rename; tagged below alongside libs/dewey and libs/go-mcp).\n\n🤡 Generated with Clown 0.3.22+dirty (https://code.linenisgreat.com/clown/commit/dirty)",
          "is_bot": false,
          "headline": "rename Go modules github.com/amarbel-llc/purse-first -> code.linenisg…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-20T15:34:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6e671d48fc4723b5680109ca33361b96fec341a3",
          "body": "…fig to dagnabit's nested pass\n\nThe check/repair scripts `cd \"${deweyDir}\"` before invoking dagnabit's\nown conformist-driven facade-format pass, so that pass's tree root is\nalready deweyDir. Consumers whose Go module lives in a subdirectory\n(deweyDir != repo root) commonly set `programs.goimports.wo\n[…]\n purse-first pin. chrest gets the analogous\npropagation via a purse-first bump — see the follow-up commit there.\n\n🤡 Generated with Clown 0.3.22+dirty (https://code.linenisgreat.com/clown/commit/dirty)",
          "is_bot": false,
          "headline": "nix/linters/dewey-facade-export: strip working-dir before feeding con…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-19T23:06:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16a16aadb3247a64e3d284a76725cf9673eb2834",
          "body": null,
          "is_bot": false,
          "headline": "bump transitive flake inputs",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-17T23:42:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46752e9f7643d1a9d9c1a6cc6e443d0e24e8c67d",
          "body": "The facade formatter's treefmt escape hatches — exec a bare `treefmt`\non finding treefmt.toml, `nix fmt` on treefmt.nix — were only\nreachable against bats and chrest, and both flipped to conformist\ntoday (bats 6f57aff, chrest efcf350). Dead code now:\n\n- exporter_treefmt.go → exporter_conformist.go (\n[…]\n --check drift-free (only unexported identifiers\nremoved, so pkgs/ needed no regen).\n\n:clown: Clown 0.3.22+1cb8383 — https://code.linenisgreat.com/clown/commit/1cb8383ef3006e1179952e14c7031d8ec2dc127e",
          "is_bot": false,
          "headline": "dagnabit: delete the treefmt fallback (eng#246)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-17T18:13:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9f5250b136e6ac8e547913ce6b2bdee0dc854720",
          "body": "The fleet is forge-canonical (FDR-0016): origins point at\ncode.linenisgreat.com and GitHub is a read-only push mirror, so\n`gh release create` both errors against the non-GitHub remote and\nwould put the canonical release artifact on the mirror. Swap to\nforgejo-cli: `fj release create <NAME> --tag <ta\n[…]\ne-path\ncomments/docs updated to match; deliberately GitHub-facing tooling\nuntouched.\n\n:clown: Clown 0.3.22+1cb8383 — https://code.linenisgreat.com/clown/commit/1cb8383ef3006e1179952e14c7031d8ec2dc127e",
          "is_bot": false,
          "headline": "release: cut releases on the forge via fj, not gh (eng#245)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-17T17:41:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d5312da3d7350824951db0baabb3b34ec6caa13a",
          "body": "conformist: 2099b7b → ?\ngomod2nix: f253033 → ?\nigloo: e04bba9 → ?",
          "is_bot": false,
          "headline": "bump flake inputs: conformist, gomod2nix, igloo",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-17T01:49:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c7eac281a28cc52303f920839dc8862b820b5c6",
          "body": null,
          "is_bot": false,
          "headline": "bump transitive flake inputs",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-16T11:37:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d3361cbfd0828b34b77d5eea622b0a721b3fdfb",
          "body": "conformist: ffaed59 → 2099b7b",
          "is_bot": false,
          "headline": "bump flake inputs: conformist",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-15T10:42:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e15e981e7494ce0286a7cb279bbda083f726b19",
          "body": "conformist: 1985c0c → ffaed59",
          "is_bot": false,
          "headline": "bump flake inputs: conformist",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-14T14:22:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3ad3d58f15005c5caf0e32e85a1d48655ed25d6",
          "body": null,
          "is_bot": false,
          "headline": "bump transitive flake inputs",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-14T01:29:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c645d3c2104e488f06cebc6ebcd635102090368",
          "body": "conformist: 726b745 → 1985c0c\nigloo: 0dab674 → e04bba9",
          "is_bot": false,
          "headline": "bump flake inputs: conformist, igloo",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-13T13:46:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19447183bfdb717c1990069cfa5cc68c82801fca",
          "body": "igloo: d1c081d → 0dab674",
          "is_bot": false,
          "headline": "bump flake inputs: igloo",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-12T21:38:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc7607f4234866c55381715c1c127282653543e9",
          "body": "conformist: ef129f0 → 726b745",
          "is_bot": false,
          "headline": "bump flake inputs: conformist",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-07-07T23:19:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f5efdafee1c5cc81aba3239b3918994d432835e",
          "body": "conformist: eb3ec70 → ef129f0\nigloo: 991d36f → d1c081d",
          "is_bot": false,
          "headline": "bump flake inputs: conformist, igloo",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-06T13:08:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50a465936c8bf265c935331b9678fe55cd63d6a9",
          "body": "conformist: 56ea0df → eb3ec70\nigloo: e27cfa4 → 991d36f",
          "is_bot": false,
          "headline": "bump flake inputs: conformist, igloo",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-06T11:12:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b98141ab179ba22e5a3ace1b85e109c3e4bd656",
          "body": "conformist: 14ce434 → 56ea0df\nigloo: 534b764 → e27cfa4",
          "is_bot": false,
          "headline": "bump flake inputs: conformist, igloo",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-06T03:26:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bf4c5f2c090c18df70387b9f8b9739dbef52696",
          "body": "… halves\n\nThe focused drift CHECK (debug-dewey-pkgs-drift) and the module lanes\nthread DAGNABIT_CONFORMIST_CONFIG + DAGNABIT_CEILING_DIRECTORIES, but\nthe two debug REPAIR recipes still invoked build/dagnabit bare — so a\nhand-run export formatted facades via the upward config walk, which in\na toml-le\n[…]\n Mirror the drift recipe's\nthreading so check and repair format identically.\n\nSigned-off-by: Clown 0.3.16+9d7b6e7 <https://github.com/amarbel-llc/clown/commit/9d7b6e79f3c317e0871419be6ae1ac3efcc8e124>",
          "is_bot": false,
          "headline": "debug-dewey-export{,-library}: thread the #159 config into the repair…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-05T10:44:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "400e71c34a4b903365cbc4c273947cc01146e535",
          "body": "Part of the eng tier-B convergence (proven on madder: the pre-commit\ncodegen lane cannot heal a cascade bump commit because its store-pinned\ndriver predates the bump; the merge-repair phase, running against the\nrebuilt post-bump devshell, can — but only if the repo exposes its own\nhermetic repair ho\n[…]\nes.conformist-repair + on\nthe devShell PATH, mirroring the preCommit wiring.\n\nSigned-off-by: Clown 0.3.16+9d7b6e7 <https://github.com/amarbel-llc/clown/commit/9d7b6e79f3c317e0871419be6ae1ac3efcc8e124>",
          "is_bot": false,
          "headline": "expose build.repair (unpin conformist) for merge-time self-healing",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-04T11:26:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb8b7676ea19f53332eaf9381fbe5629a5fefb34",
          "body": null,
          "is_bot": false,
          "headline": "refresh flake.lock",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-03T14:38:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "685d086e8fc1141217bcd2226fb2ceb9d35ee408",
          "body": null,
          "is_bot": false,
          "headline": "release v0.4.1",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-07-03T14:21:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "189806b6436f5aed6063f7343a30e9ec76c366f8",
          "body": null,
          "is_bot": false,
          "headline": "refresh flake.lock",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-30T20:01:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1494bcc28e15ba4522bac5fb4ba0959e87d68227",
          "body": null,
          "is_bot": false,
          "headline": "refresh flake.lock",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-28T15:04:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6773279733150c0ccac8242f335f7858c9172f7",
          "body": null,
          "is_bot": false,
          "headline": "bump nixpkgs-master: d233902 → 567a49d",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-25T15:27:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42941ba6139457bd0777364ceab1358e458ab9a5",
          "body": "Format staged content at authoring time so a `nix fmt` miss can never reach the\nmerge gate again — exactly the gap that let the #163 Step 2 nixfmt miss through.\n\n- flake.nix: expose `packages.conformist-pre-commit = conformistEval.config.build.preCommit`\n  (the store-pinned `conformist --staged --ex\n[…]\noad) so the devShell\nexposes the hook command and spinclass re-installs the git hook.\n\n:clown: clown 0.3.14+295fae7\nhttps://github.com/amarbel-llc/clown/commit/295fae7bf5b2cb8a13578d2af6fc7e9984bc98bd",
          "is_bot": false,
          "headline": "feat(conformist): wire per-commit conformist repair hook",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-24T14:51:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c38be19e4f54721a63d8972fb2e3bedcf5c20594",
          "body": "…ules (#163 Step 2)\n\nParameterize the two dewey conformist linter modules and expose them from\npurse-first's flake as `lib.conformistLinters.{dewey-facade-export,dewey-reposition}`\nso downstream dewey-layout repos (madder) can import them and drop their\nper-repo facade wrappers + recipes.\n\n- nix/lin\n[…]\nabit, delete dagnabitWrapped + codemod-facades/lint-facades). #163 stays open\nfor it.\n\n:clown: clown 0.3.14+295fae7\nhttps://github.com/amarbel-llc/clown/commit/295fae7bf5b2cb8a13578d2af6fc7e9984bc98bd",
          "is_bot": false,
          "headline": "feat(dewey): publish facade-export/reposition linters as reusable mod…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-24T14:29:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cf4834150c6c819d65636b198a5e2cce937a97fa",
          "body": "Express `dagnabit export`'s facade-format pass as a first-class conformist\nwhole-tree linter, mirroring `nix/linters/dewey-reposition.nix`. Editing a\npublic symbol in `libs/dewey/internal/` without regenerating `pkgs/` now trips\na local lint signal instead of only surfacing at the merge gate.\n\n- nix\n[…]\necorded in FDR 0013; matches the sibling reposition linter.\n\nFDR 0013 → experimental.\n\n:clown: clown 0.3.14+295fae7\nhttps://github.com/amarbel-llc/clown/commit/295fae7bf5b2cb8a13578d2af6fc7e9984bc98bd",
          "is_bot": false,
          "headline": "feat(dewey): facade-export drift as a conformist module (#163)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-24T13:15:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8d3cce0683eaae563aebf73cbfbc799ed4e969ae",
          "body": "Three related landings from today's conformist/dagnabit issue triage:\n\nProvenance (#165, #164, #118):\n- add `dagnabit version` subcommand printing dewey buildinfo\n- stamp version+commit into generated facade headers (Go + rust\n  exporters), so a binary↔library skew surfaces as export drift\n  (mirror\n[…]\ngn for the next landing.\n\nCloses #161\nCloses #162\nCloses #164\nCloses #165\nCloses #118\n\n:clown: clown 0.3.12+5ea26ec\nhttps://github.com/amarbel-llc/clown/commit/5ea26ec4b2cf0ec7c393bea642ec58aa9b871f78",
          "is_bot": false,
          "headline": "feat(dagnabit): provenance stamping + conformist wrapper hardening",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-19T16:49:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a40b5e16a64a674dd708611cabe2b07612749a1",
          "body": null,
          "is_bot": false,
          "headline": "release v0.3.3",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-19T14:29:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a56681b987e364083a11d77239df896d788fff05",
          "body": "Two parts (purse-first#160):\n\n1. Reposition: `dagnabit reposition` reported internal/echo/dagnabit_rust as\n   mis-positioned — its actual dependency depth puts it at bravo, not echo.\n   Applied via `dagnabit internal` (8 files moved echo→bravo, import paths\n   rewritten, the pkgs/dagnabit_rust facad\n[…]\nt-worktree.\n   - CLAUDE.md / README.md: lint-lane descriptions updated.\n\nCloses #160.\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
          "is_bot": false,
          "headline": "fix(dewey): reposition dagnabit_rust echo→bravo + gate reposition drift",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-19T12:09:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36c6cc7a832e4f8ae40e53fcea595e13ee1dc671",
          "body": "…t config\n\ndagnabit's FormatOutput discovered the project formatter by walking UP from the\nmodule dir for a conformist.toml/treefmt.* config, to the filesystem root. After\na repo migrates to a Nix-generated conformist config (conformist.nix via\nevalModule, no conformist.toml on disk), the walk escal\n[…]\nvVar),\nso the vars are documented in the manpage + source doc comments.\n\nCloses #159.\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
          "is_bot": false,
          "headline": "fix(dagnabit): bound formatter-config walk + honor explicit conformis…",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-19T11:02:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "868f8d2f21fcfd3bfb42cf479a63fbbf4e0a3522",
          "body": "… workaround\n\nconformist fixed two things upstream that purse-first was working around:\n- justfile-default's backslash-continued-aggregate false positive (now uses\n  `just --dump --dump-format json` plumbing, with a regression fixture);\n- programs.shfmt gained a caseIndent option (defaults on) emitt\n[…]\ncanonical linters with zero local\nlinter copies and no formatter-option augmentation.\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
          "is_bot": false,
          "headline": "build(conformist): bump to 1b8e32d, drop local justfile-default + -ci…",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-18T21:22:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ad27056dcc933e36432941d51151f105abd0ca2",
          "body": "…formist's buggy one\n\nconformist's justfile-default linter (nix/linters/justfile-default.nix at\na8471278) decides whether a `default` dependency is an aggregate by awk-sniffing\nraw justfile text: it checks whether the dependency's next PHYSICAL line is\nindented. A backslash-continued aggregate (e.g.\n[…]\nname once conformist drops its version\n(coordination in flight; purse-first task #8).\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
          "is_bot": false,
          "headline": "feat(conformist): author correct justfile-default linter, disable con…",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-18T20:06:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f2f789248924c10c1b7d4af9b6ab21f38604736a",
          "body": "…onformist.toml\n\nInvert the conformist<->purse-first dependency so conformist is strictly\nupstream with no cycle. conformist no longer consumes purse-first (it builds\ngolangci-lint-dewey from a pinned source FOD as of conformist master a8471278),\nso purse-first can now take conformist as a flake inp\n[…]\none false-positives\non backslash-continued aggregates), shfmt caseIndent upstreaming.\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
          "is_bot": false,
          "headline": "build(conformist): consume conformist as upstream flake input, drop c…",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-18T19:50:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "00c193ed49b477fdf6c23450c35256c2251e3b72",
          "body": null,
          "is_bot": false,
          "headline": "refresh flake.lock",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-11T18:05:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afbaee5ec8336a37caba0eef5ac4d67165ead278",
          "body": "Design record for upstreaming madder's futility home to dewey as the\ndeclarative command framework that supersedes internal/echo/command and\ngo-mcp's command (the purse-first#63 mandate), synthesizing the dodder,\ncutting-garden, and madder forks' designs.\n\nCore design: the Run signature is the singl\n[…]\nts rejection rationale recorded in\nBackground to prevent relitigation.\n\n:clown: generated with Clown 0.3.10+44f75d5\nhttps://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be",
          "is_bot": false,
          "headline": "docs(fdr): FDR-0012 declarative command framework (futility → dewey)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-11T11:35:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f006f5fa947ea6d76cea7c3b2d74b84f17755913",
          "body": null,
          "is_bot": false,
          "headline": "refresh flake.lock",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-10T01:23:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa45e64410f5bef63d26b09cbd563f36a2959d93",
          "body": "Wire the dewey gclplugin analyzers (defererr/seqerror/repool/testui) over\ndewey's OWN packages via the golangci-lint-dewey custom binary, in a new\n`lint-dewey-self` recipe folded into the `lint` CI gate. Adds a root\n.golangci.yml: build-tags=test (test_ui.T lives behind //go:build test),\nand a testu\n[…]\nfull dewey suite\n(`just test-dewey`) green; `go vet -tags test` clean.\n\n:clown: generated with Clown 0.3.10+44f75d5\nhttps://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be",
          "is_bot": false,
          "headline": "feat(dewey): dogfood the dewey analyzers over dewey's own source",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-10T01:17:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ac714b5426466c3aebca1d876d580048ed09093",
          "body": "New go/analysis analyzer flagging stdlib *testing.T in function\nparams/results, interface methods, and struct fields, steering test\ncode toward dewey's test_ui.T (which embeds *testing.T and adds\nassertion/printing helpers).\n\nCanonical Go test entry points (free TestXxx funcs) are exempt — the\ntesti\n[…]\ne root CLAUDE.md flake-output list (which\npredated actx/paramobj too).\n\n:clown: generated with Clown 0.3.10+44f75d5\nhttps://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be",
          "is_bot": false,
          "headline": "feat(dewey): add testui analyzer (stdlib *testing.T -> test_ui.T)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-10T01:17:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9536b5d3494eaa9f803b81e1d1346a7bfa35eaa6",
          "body": null,
          "is_bot": false,
          "headline": "release v0.3.1",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-10T01:17:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5c92dd2c0ef0aac2b1286f71b0bf9de542fcea7",
          "body": null,
          "is_bot": false,
          "headline": "refresh flake.lock",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-08T20:19:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c4b12e3b8e01ea023af73961a4ca822c5c4624f",
          "body": "conformist takes purse-first as an input (golangci-lint-dewey), so a\nconformist input here forms a cycle that unrolls igloo duplicates into\nevery consumer's lock graph (eng carried 9 igloo nodes through\npurse-first→conformist→purse-first chains). The edge was dev-only: the\n`nix fmt` wrapper and a de\n[…]\nne removed the 50+ unrolled nodes.\n\nRequested by the eng input-graph dedup session.\n\n:clown: Clown 0.3.10+44f75d5 (https://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be)",
          "is_bot": false,
          "headline": "build(flake): sever the conformist input (dev-only cycle edge)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T23:22:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dfb31b548661b48b9a490fb5bbdc32dc6a951c39",
          "body": "The retryable Recover → abort path wrapped the caller's error in\nerrContextRetryAborted with no Unwrap, type-erasing it on the other\nside of ctx.Run — errors.Is/errors.As could not classify typed errors\n(dodder's lock-failure classification, dodder#249).\n\nTest-first: TestContextRetryAbortedPreservesErrorChain failed with the\nexact reported symptom, passes with the one-method fix.\n\n:clown: Clown 0.3.10+44f75d5 (https://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be)",
          "is_bot": false,
          "headline": "fix: errContextRetryAborted unwraps to the aborted error (closes #145)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T23:13:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53e84476feee93ca1674e2de859754faff3acb42",
          "body": "…ses #142)\n\nAll four langGo branches now resolve the module path and anchor\ngo_list.Reader / GitMover / Exporter at the rootDir that detectLanguage\nalready found, instead of re-requiring go.mod in the CWD — symmetric\nwith rust mode. Prefixes and package paths stay root-relative. Invoking\nfrom the mo\n[…]\ny containing go.mod\" before the fix). Manpage\nLANGUAGES paragraph updated to match.\n\n:clown: Clown 0.3.10+44f75d5 (https://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be)",
          "is_bot": false,
          "headline": "fix: go mode honors the detected module root from subdirectories (clo…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T22:35:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "347fb63da1dfe8f482e6d0a0210e636191ef2929",
          "body": "Records the feature's interface, honest limitations (incl. unverified\nmacro_export glob coverage and the two-language dispatch ceiling), and\nthe four tuning levers settled during implementation.\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "docs(fdr): FDR-0011 dagnabit rust mode",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T17:23:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "157f7b7d485b0122ccb4f950d274f2480ea9894c",
          "body": "… tiers)\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "docs(dagnabit): document rust mode (manpage, flag help, dewey package…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T17:17:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b077dd78daa73320ebad4799de9f1dece9b73c86",
          "body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "test(dagnabit): BATS lane for rust mode",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T16:55:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e37621af17a37e00b16defdb25e635499dab6a2c",
          "body": "…writes\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "build(dagnabit): wrap binary with ast-grep on PATH for rust rename re…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T16:41:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fb245e1e23f9ea8bc4a75fff8029707fd37917a",
          "body": "…nd cargo check gates\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(dewey/dagnabit_rust): crate move/rename with ast-grep rewrites a…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T16:32:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df83af59d1187535a5968b4dc9b3113b510fa5c7",
          "body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(dagnabit): rust export CLI wiring",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T15:21:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1a71fbc7a51ee157a96247f5bab6bc959f649cd",
          "body": "…ta directive and check mode\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(dewey/dagnabit_rust): glob-facade exporter (pub use) with metada…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T15:01:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f16b20e1dd8c45a75062070cd483d3feea784c3c",
          "body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(dagnabit): language auto-detection and rust reposition wiring",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T14:40:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7b4ea73b3c0d48f09a99c23a32efee1b06b8f5b",
          "body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(dewey/dagnabit_rust): cargo workspace crate mover",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T13:47:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "422cb1ca8f60263b08a7c2232f0899694c7b1635",
          "body": null,
          "is_bot": false,
          "headline": "refresh flake.lock",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-07T11:39:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5521b9f96fc5bdb753fa8bba053b79aa6f1a0ab",
          "body": "…bit rust mode\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(dewey/cargo_metadata): cargo-metadata DependencyReader for dagna…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T02:00:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0e89935f0bd5729449167d2dc87b5a6b4944019",
          "body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(dewey/cargo_manifest): comment-preserving span edits for Cargo.toml",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T01:36:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5b2690fa92c588793ea5d316b9a27e52c5e30bc",
          "body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(dewey/cargo_workspace): cargo workspace root discovery",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T01:06:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aea9e383101d7ff7be6a8def27bd10bc5aaa1dfc",
          "body": "…gnabit rust mode\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "feat(devenvs): rust devshell (cargo, rustc, rustfmt, ast-grep) for da…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T00:44:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5ce161f408cdf7403eb0414134ddc925d69bace",
          "body": "14 TDD tasks from the approved design: devshell, cargo_workspace /\ncargo_manifest / cargo_metadata / dagnabit_rust dewey packages, CLI\nlanguage dispatch, glob-facade export, ast-grep rename, nix wrap,\nBATS lane, docs, FDR.\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "docs: implementation plan for dagnabit rust mode",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T00:39:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "403c1211d716cc7d2f1aa886dfacb8f21de672e3",
          "body": "…p renames)\n\nApproved interactive design: rust as a language mode of the existing\ndagnabit binary behind the DependencyReader/LevelMapper/PackageMover\nseams (Approach A); cargo-metadata dep graph, Cargo.toml span-based\nrewrites, glob re-export facade crates, ast-grep-driven crate-rename\nsource rewri\n[…]\ns gated by cargo check. Flags the two-language dispatch\nas an FDR-bound limitation.\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
          "is_bot": false,
          "headline": "docs: design for dagnabit Rust support (crates, glob facades, ast-gre…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-07T00:33:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b3a6d4dfaf34ecef72251c06550a82a67c1bfd9",
          "body": null,
          "is_bot": false,
          "headline": "release v0.3.0",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-06T22:05:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51e69a84184ebeb6f62d1ec37bf92e898eba3448",
          "body": "Replace the pre-existing identity-based HTTP error rendering — where\nBadRequestf(\"invalid x\") rendered Error() as \"errors.HTTP: 400 Bad\nRequest\" and hid the underlying message behind ShouldHideUnwrap —\nwith a semantics-based representation in which Error() returns the\nunderlying user message and the\n[…]\ns/0002-http-status-as-semantics.md for the full spec,\nincluding downstream migration notes for cutting-garden, madder,\nand moxy.\n\nCloses #107\n\n:clown: via [Clown](https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "feat(dewey/errors): HTTP status as semantics not identity (RFC 0002)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-06T21:53:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0f7aa448c4d2938cec4a4ecef734f1d795545bfe",
          "body": "…ses #136)\n\nAll five dewey analyzers matched their suppression directive\n(//defer:err-checked, //seq:err-checked, //repool:owned,\n//repool:suppress, //actx:allow, //paramobj:allow) only when the comment\nsat on the same line as the flagged statement; a directive on the line\nimmediately above — the co\n[…]\nclaimed same-line-only (actx and paramobj\npackage docs, repool CLAUDE.md).\n\n🤡 Generated with Clown 0.3.10+e8ff9ee (https://github.com/amarbel-llc/clown/commit/e8ff9ee351c67cfdf06e9e61ebe262ec3aaa247d)",
          "is_bot": false,
          "headline": "fix: accept line-above suppression directives in dewey analyzers (clo…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-06T16:31:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f15a3fcf621770592c385c10ce7644b1f9bbdec1",
          "body": "…s #134)\n\nAdd cmd/golangci-lint-dewey: a standalone Go module (deliberately NOT in\ngo.work) whose main blank-imports libs/dewey/gclplugin and hands off to\ngolangci-lint's public commands.Execute — the plain main that\n`golangci-lint custom` generates, minus the network-hungry clone/codegen.\nBuilt pur\n[…]\nile regen + dev-loop build\nrecipes: build-nix-gomod2nix-gcl, build-go-gcl.\n\n🤡 Generated with Clown 0.3.10+e8ff9ee (https://github.com/amarbel-llc/clown/commit/e8ff9ee351c67cfdf06e9e61ebe262ec3aaa247d)",
          "is_bot": false,
          "headline": "fix: ship nix-built custom golangci-lint with the dewey plugin (close…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-06T15:46:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21d328cce0f439f2322021bcda8695f02180503c",
          "body": "A tool handler had no way to push a notifications/progress message while\nit was still running, blocking activity-driven keep-alive for long tools.\nThe inbound params._meta.progressToken was dropped and the handler had no\nreference to the transport.\n\nParse _meta.progressToken on tools/call (new proto\n[…]\n did not request.\n\nVerified with -race: the mid-call progress write and the final response\nwrite are serialized by the transport mutex.\n\nCloses #131\n\n🤡 via Clown — https://github.com/amarbel-llc/clown",
          "is_bot": false,
          "headline": "fix: let go-mcp tool handlers emit notifications/progress mid-call",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-04T22:13:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c0ff74a9ec99c33dd6ee155fb9d45f00f007c048",
          "body": "Add a go/analysis pass (libs/dewey/internal/alfa/analyzer_paramobj) that\ngroups function and method declarations by their parameter type list\n(order-sensitive, receiver ignored) and reports each cluster reaching the\n-min-group threshold as a parameter-object-struct candidate. The check is\nadvisory —\n[…]\nit as the paramobj singlechecker binary (nix: .#paramobj) and register\nit in the golangci-lint module plugin as opt-in, alongside actx.\n\nCloses #130\n\n🤡 via Clown — https://github.com/amarbel-llc/clown",
          "is_bot": false,
          "headline": "fix: add paramobj analyzer flagging shared parameter lists",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-04T22:13:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4258b25c8bb82dcef4745f9d12df50bcaf76c667",
          "body": "…ext.Context\n\nAdd a go/analysis pass (libs/dewey/internal/alfa/analyzer_actx) that flags\nstdlib context.Context in function parameters, results, and struct fields\nand recommends dewey's errors.ActiveContext (interfaces.ActiveContext) for\nits lifecycle/error-cancellation semantics. Interop boundaries\n[…]\ntings.actx=true —\nsince enforcing ActiveContext is an ecosystem-specific opinion rather than a\ngeneral Go check like defererr/seqerror.\n\nCloses #129\n\n🤡 via Clown — https://github.com/amarbel-llc/clown",
          "is_bot": false,
          "headline": "fix: add actx analyzer enforcing dewey ActiveContext over stdlib cont…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-04T20:51:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ee07fa5ad4271cb33ee1ad1944c6211ee056bcf",
          "body": null,
          "is_bot": false,
          "headline": "release v0.2.9",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-04T18:14:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea00d462064200803f17144627cfff1ae2805624",
          "body": "The upstream amarbel-llc/treelint flake was renamed to conformist and its\npackage installs a binary named `conformist`, not `treelint`. Everything in\nthis repo invoked the tool as `treelint` by name, so none of it resolved\nonce the rename landed (the `lint-dewey_pkgs_drift` and `lint-conformist`\nlan\n[…]\n references.\n\nVerified: conformist resolves on PATH; `dagnabit export --check` formats\nfacades with no drift; `conformist check` clean; BATS 1..11 all ok.\n\n:clown: https://github.com/amarbel-llc/clown",
          "is_bot": false,
          "headline": "refactor: migrate treelint → conformist (binary, config, input)",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-04T18:05:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ca7037773f93dd416321368cce35da4db4850c93",
          "body": "Bumps igloo and the treelint input (now the renamed conformist repo),\ndropping the transitive treefmt-nix input conformist no longer pulls in.\n\n:clown: https://github.com/amarbel-llc/clown",
          "is_bot": false,
          "headline": "build(deps): refresh flake.lock (igloo + treelint→conformist)",
          "author_name": "sfriedenberg-etsy",
          "author_login": "sfriedenberg-etsy",
          "committed_at": "2026-06-04T17:52:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db1b7096f7a6837c9c1075dde2516f1ffddf4099",
          "body": null,
          "is_bot": false,
          "headline": "refresh flake.lock",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-01T11:57:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "777b30aa5a76ce00f4ff4c086a42dce21f803e61",
          "body": null,
          "is_bot": false,
          "headline": "release v0.2.8",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-01T00:41:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8322cd9ecce8b9726aad439f231e8d18785d209",
          "body": "…ormatter instead of skipping (closes #127)\n\nwriteCheckFixture skipped whenever findTreefmtConfig found an ancestor\ntreefmt/treelint config — always true when $TMPDIR sits inside a repo that\nhas one (this worktree's .tmp/ under the root treelint.toml), so the five\nCheckAll/CheckPackage drift tests n\n[…]\nests now execute regardless of $TMPDIR;\ntheir drift assertions are unchanged (both the committed and comparison\ncopies stay unformatted).\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
          "is_bot": false,
          "headline": "test(dagnabit): run CheckAll/CheckPackage fixtures via a no-op fake f…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-01T00:32:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96cd0314decafb42215f80e55c3c8cf34cce22bd",
          "body": "…ns (closes #125)\n\nexport --check rendered its comparison facades into the system temp dir\n(os.MkdirTemp(\"\")). FormatOutput runs the project formatter with its tree\nroot anchored at the config/module root, and a formatter invoked on a path\noutside that tree root formats nothing. When $TMPDIR sits ou\n[…]\nst that drives the\ntreefmt branch with a tree-root-aware fake formatter; it reproduces the\nphantom drift before the fix and passes after.\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
          "is_bot": false,
          "headline": "fix(dagnabit): render export --check copy in-tree so the formatter ru…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-06-01T00:12:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "035f9a8234a5f557032a36fe9a4eebe531d720b6",
          "body": "just's {{message}} is literal text-splicing into the generated shebang\nscript, not safe quoting. A changelog subject containing backticks or\n$(...) — e.g. a commit titled `export --check` — lands inside the\ndouble-quoted `git tag -m \"...\"` string and bash evaluates it as a\ncommand substitution, corr\n[…]\n --: invalid option` errors. Pass the message as an exported\nenv var ($message) so git receives it as inert data.\n\nRefs amarbel-llc/eng#129\n\n🤡 Committed by Clown <https://github.com/amarbel-llc/clown>",
          "is_bot": false,
          "headline": "fix(justfile): pass tag message via $env var, not {{ }} interpolation",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T23:30:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1fa436167223c1e43ec29610c5e96ed0930c6a3b",
          "body": null,
          "is_bot": false,
          "headline": "release v0.2.7",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T23:19:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "997c8675d0ed6daf8f2cf4b3fac1986181a99e90",
          "body": null,
          "is_bot": false,
          "headline": "go mod tidy",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T23:15:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fa6869d8776ac39d59cc810c04ef54c8ac891e5",
          "body": "Underscore the noun segment per eng-design_patterns-justfile(7) style (verb-noun\nwith underscores inside a multi-word noun, cf. list-active_sessions). Also\nde-stale the CLAUDE.md `just lint` description: lint-fmt/treefmt → lint-treelint\nafter the treefmt-nix → treelint migration.\n\nRefs amarbel-llc/treelint#1 — a future whole-tree linter kind could host the\n`dagnabit export --check` facade-drift gate this recipe runs.\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
          "is_bot": false,
          "headline": "refactor(justfile): rename lint-dewey-pkgs-drift → lint-dewey_pkgs_drift",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T23:08:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a701f5639a98b1f31f5c8a36a46fc558c534aa63",
          "body": "…t detection\n\n`dagnabit export --check` regenerates + formats facades into a temp dir and\ncompares against the committed pkgs/, exiting nonzero (naming the out-of-sync\npackages) WITHOUT mutating the tree. Works in every export mode (--library,\nexplicit packages, directive scan). lint-dewey-pkgs-drif\n[…]\ndir.\n- Hand-written *_test.go facade tests are never flagged as stale (the exporter\n  only emits main.go + build-tag files).\n\nCloses #123\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
          "is_bot": false,
          "headline": "feat(dagnabit): add `export --check` for side-effect-free facade drif…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T17:39:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a95ee88592e23c2363e028346e0efeb62bd10953",
          "body": "…e alias\n\nnixpkgs/igloo now aliases `nixfmt-rfc-style` to `pkgs.nixfmt` and emits an\neval warning steering callers to the latter. Switch both references (the\n`treelintFmt` formatter wrapper's runtimeInputs and the default devShell)\nto `pkgs.nixfmt`; update the CLAUDE.md Code Style note.\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
          "is_bot": false,
          "headline": "fix(flake): use pkgs.nixfmt instead of the deprecated nixfmt-rfc-styl…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T16:57:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de8ddef655c1c610aecdfb793150755f4352d41c",
          "body": "…DR housekeeping\n\n- delete lib/mkMarketplace.nix + lib.mkMarketplace; the install*/\n  generate-marketplace/package-brew CLI subcommands; internal/{install,\n  localplugin,mcp,marketplace,packagebrew,config,decision} + top-level purse/;\n  marketplace-config.json; templates/marketplace/; .#marketplace[\n[…]\nfmt gate.\n\nFDR housekeeping: deprecate homebrew-tap FDR 0008; relocate fast-direnv FDR\n0003 to amarbel-llc/igloo.\n\nCloses #91\nCloses #110\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
          "is_bot": false,
          "headline": "refactor!: remove marketplace aggregation; align justfile taxonomy; F…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T16:41:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9a8e4f2390cccd8dff7b4d2c56940b06ee357b30",
          "body": "Remove the treefmt-nix input, treefmtEvalBySystem, the devshell treefmt\nwrapper, and checks.treefmt. `nix fmt` now runs a treelint wrapper (treelint\nplus the formatter binaries its ./treelint.toml drives on PATH); formatting\ndrift is gated by `just lint` (treelint check) rather than a flake check.\nD\n[…]\ntreelint; `just lint` -> treelint check).\n\nVerified: `nix fmt` -> treelint (no-op on the formatted tree); `just` green\n(validate / lint / build / test).\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "build: retire treefmt-nix; `nix fmt` runs treelint",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T16:06:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f6f1b4cc66cb8b5654e9a0de8b4dc66f986bdf1",
          "body": "- `just fmt` now runs treelint (repair) instead of `go fmt ./...` -- repo-wide\n  formatting via treelint's chain (goimports -> gofumpt, nixfmt, shfmt) per\n  ./treelint.toml.\n- `just lint` gains lint-treelint (`treelint check`): the read-only format\n  drift gate (sandbox-and-diff) plus shellcheck.\n\nV\n[…]\na no-op\non the formatted tree. treefmt-nix's `nix fmt` / checks.treefmt still exist in\nthe flake (now redundant); retiring them is the follow-up commit.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "build: run treelint in the just CI loop (fmt + lint gate)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T14:11:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f68503ac3658222a00d656cb8e4ef12673f8016d",
          "body": "Silences the BW02 warnings bats emitted after the SC2314 fix switched the\nomits-checks to `run ! grep` -- a Bats >= 1.5 feature that warns unless the\nminimum version is declared. Still 22/22.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "test(bats): declare bats_require_minimum_version 1.5.0 in package_brew",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T14:03:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "752deee32782608200ec1a5ee207d647b8cfe8be",
          "body": "Picks up treelint's `Args: cobra.ArbitraryArgs` fix, so dagnabit's\n`treelint <output-dir>` facade-format pass works again -- it had started\nfailing with `unknown command <path>` once treelint gained the check/version\nsubcommands. `just lint` (dewey-export-library + drift check) is green again.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "build(deps): bump treelint to dbc3fb9 (positional-path-args fix)",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T13:55:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a29e1cbe11b5db70143ca09ce8b9b5f3b98f43e",
          "body": "- package_brew.bats: `! grep -q X \"$F\"` -> `run ! grep -q X \"$F\"` (SC2314).\n  A bare `!` on a non-final line is a no-op in Bats >= 1.5; `run !` makes the\n  \"pattern absent\" assertions actually enforce. Intent-preserving; verified by\n  `just test-package-brew` (22/22 pass, including the converted omi\n[…]\n a false positive, since $output is set by\n  run_package_bin's internal `run`.\n\n`treelint check` is now clean: zero formatter drift, zero lint findings.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "test(bats): fix shellcheck findings surfaced by treelint",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T13:42:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cc62ba354210a3560bc950349d4488a07e11aa4e",
          "body": "Apply shfmt formatting that treefmt-nix's shfmt never actually applied -- its\noptions were lib.mkForce-overridden in treefmt.nix without -w, making the\nformatter a silent no-op. Pure whitespace normalization (e.g. `> \"$x\"` ->\n`>\"$x\"`); no test-logic changes. Produced by `treelint` (which runs shfmt -w).\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "format: shfmt the bats/bash test files",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T13:31:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96ed62fea024a636234d942602ee2422a2721e96",
          "body": "…t.toml)\n\nAdd treelint (the treefmt successor) as a flake input and to the devshell,\nalongside nixfmt-rfc-style -- the one formatter the bare devshell lacked\n(gofumpt/goimports/shfmt/shellcheck already come from the go/shell devenvs).\nAdd treelint.toml mirroring treefmt.nix's formatter chain (goimpo\n[…]\ndditive for now: `nix fmt` (treefmt-nix) still drives formatting. Switching\nCI to treelint + resolving the shell reformat / shellcheck findings is next.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "build: wire treelint into purse-first (flake input, devshell, treelin…",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T13:20:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b9cd7a8c724c5d5cfe75077ab823f5e6a3658875",
          "body": "exporter_treefmt.go (used by `dagnabit export` to format generated facades)\nhardcoded treefmt config names + the `treefmt` binary. Add treelint.toml /\n.treelint.toml to the config search (preferred over the treefmt variants)\nand derive the formatter binary from the matched config, preferring\n`treeli\n[…]\n green.\nPrerequisite for treelint replacing treefmt-nix in purse-first.\n\nTests: TestFindTreefmtConfig_PrefersTreelint, TestFormatOutput_InvokesTreelint.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
          "is_bot": false,
          "headline": "dewey(dagnabit): recognize treelint.toml + run the treelint binary",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T13:06:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "39fbd2a9eb82147e900b199310346cc636e77c5d",
          "body": "Fix broken generate-marketplace example (missing required --plugins-dir,\nwrong --output) and expand the README to a self-contained overview:\n\n- CLI command table (9 commands from cmd/purse-first/main.go)\n- Nix package output table\n- dewey analyzers + golangci-lint module plugin (gclplugin/)\n- go-mcp\n[…]\ntallMCP + manpage tree\n- repository layout, development/CI-gate, multi-artifact versioning\n\nFlag go-mcp as mid-overhaul / API in flux in two places.\n\n🤡 via Clown — https://github.com/amarbel-llc/clown",
          "is_bot": false,
          "headline": "docs(readme): comprehensive standalone rewrite",
          "author_name": "friedenberg",
          "author_login": "friedenberg",
          "committed_at": "2026-05-31T11:42:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 17,
      "commits_last_year": 1016,
      "latest_release_at": "2026-07-03T14:21:23Z",
      "latest_release_tag": "v0.4.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 23,
      "days_since_latest_release": 26,
      "mean_days_between_releases": 3.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "code.linenisgreat.com/purse-first",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": null,
          "registry_url": "https://pkg.go.dev/code.linenisgreat.com/purse-first",
          "is_deprecated": false,
          "latest_version": "v0.5.0",
          "repository_url": null,
          "versions_count": 14,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-20T15:34:30Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "justfile",
        "libs/go-mcp/justfile",
        "zz-tests_bats/rfc-0001/justfile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "cmd/golangci-lint-dewey/go.mod",
        "go.mod",
        "libs/dewey/go.mod",
        "libs/go-mcp/command/huh/go.mod",
        "libs/go-mcp/go.mod"
      ],
      "largest_source_bytes": 92665,
      "source_files_sampled": 730,
      "oversized_source_files": 2,
      "agent_instruction_files": [
        "CLAUDE.md",
        "libs/dewey/CLAUDE.md",
        "libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md",
        "libs/dewey/internal/0/bech32/CLAUDE.md",
        "libs/dewey/internal/0/box_chars/CLAUDE.md",
        "libs/dewey/internal/0/equality/CLAUDE.md",
        "libs/dewey/internal/0/exec/CLAUDE.md",
        "libs/dewey/internal/0/flag_policy/CLAUDE.md",
        "libs/dewey/internal/0/hecks/CLAUDE.md",
        "libs/dewey/internal/0/http_statuses/CLAUDE.md",
        "libs/dewey/internal/0/interfaces/CLAUDE.md",
        "libs/dewey/internal/0/primordial/CLAUDE.md",
        "libs/dewey/internal/0/reset/CLAUDE.md",
        "libs/dewey/internal/0/stack_frame/CLAUDE.md",
        "libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md",
        "libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md",
        "libs/dewey/internal/alfa/cmp/CLAUDE.md",
        "libs/dewey/internal/alfa/collections_coding/CLAUDE.md",
        "libs/dewey/internal/alfa/collections_map/CLAUDE.md",
        "libs/dewey/internal/alfa/equals/CLAUDE.md",
        "libs/dewey/internal/alfa/pool/CLAUDE.md",
        "libs/dewey/internal/alfa/quiter_collection/CLAUDE.md",
        "libs/dewey/internal/alfa/quiter_seq/CLAUDE.md",
        "libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md",
        "libs/dewey/internal/alfa/unicorn/CLAUDE.md",
        "libs/dewey/internal/bravo/collections_slice/CLAUDE.md",
        "libs/dewey/internal/bravo/errors/CLAUDE.md",
        "libs/dewey/internal/charlie/comments/CLAUDE.md",
        "libs/dewey/internal/charlie/delim_reader/CLAUDE.md",
        "libs/dewey/internal/charlie/env_vars/CLAUDE.md",
        "libs/dewey/internal/charlie/expansion/CLAUDE.md",
        "libs/dewey/internal/charlie/flags/CLAUDE.md",
        "libs/dewey/internal/charlie/lua/CLAUDE.md",
        "libs/dewey/internal/charlie/ohio/CLAUDE.md",
        "libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md",
        "libs/dewey/internal/charlie/quiter/CLAUDE.md",
        "libs/dewey/internal/charlie/quiter_set/CLAUDE.md",
        "libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md",
        "libs/dewey/internal/charlie/ui/CLAUDE.md",
        "libs/dewey/internal/charlie/values/CLAUDE.md",
        "libs/dewey/internal/delta/catgut/CLAUDE.md",
        "libs/dewey/internal/delta/cli/CLAUDE.md",
        "libs/dewey/internal/delta/collections/CLAUDE.md",
        "libs/dewey/internal/delta/collections_ptr/CLAUDE.md",
        "libs/dewey/internal/delta/collections_value/CLAUDE.md",
        "libs/dewey/internal/delta/delim_io/CLAUDE.md",
        "libs/dewey/internal/delta/files/CLAUDE.md",
        "libs/dewey/internal/delta/format/CLAUDE.md",
        "libs/dewey/internal/delta/heap/CLAUDE.md",
        "libs/dewey/internal/delta/script_config/CLAUDE.md",
        "libs/dewey/internal/delta/thyme/CLAUDE.md",
        "libs/dewey/internal/delta/tridex/CLAUDE.md",
        "libs/dewey/internal/delta/trie/CLAUDE.md",
        "libs/dewey/internal/delta/xdg_defaults/CLAUDE.md",
        "libs/dewey/internal/echo/age/CLAUDE.md",
        "libs/dewey/internal/echo/alfred/CLAUDE.md",
        "libs/dewey/internal/echo/collections_delta/CLAUDE.md",
        "libs/dewey/internal/echo/command/CLAUDE.md",
        "libs/dewey/internal/echo/debug/CLAUDE.md",
        "libs/dewey/internal/echo/editor/CLAUDE.md",
        "libs/dewey/internal/echo/ohio_files/CLAUDE.md",
        "libs/dewey/internal/echo/script_value/CLAUDE.md",
        "libs/dewey/internal/echo/xdg/CLAUDE.md",
        "libs/dewey/internal/foxtrot/config_cli/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 16698
    },
    "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/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        }
      ],
      "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": 1,
        "merged_prs": 3,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "friedenberg",
          "commits": 982,
          "avatar_url": "https://avatars.githubusercontent.com/u/181492?v=4"
        },
        {
          "type": "User",
          "login": "sfriedenberg-etsy",
          "commits": 38,
          "avatar_url": "https://avatars.githubusercontent.com/u/239646900?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.962
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "flakehub.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "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": 0,
            "reason": "16 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "c1ced82d4ee85784a718a7130c7c3960e7d692b1",
        "ran_at": "2026-07-29T23:12:30Z",
        "aggregate_score": 3.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-29T13:46:33Z",
      "oldest_open_prs": [
        {
          "number": 116,
          "created_at": "2026-05-27T21:08:40Z",
          "last_comment_at": "2026-05-27T21:12:06Z",
          "last_comment_author": "friedenberg"
        }
      ],
      "last_merged_pr_at": "2026-05-31T01:32:47Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/amarbel-llc/purse-first",
    "host": "github.com",
    "name": "purse-first",
    "owner": "amarbel-llc"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 57,
      "inputs": {
        "security": 31,
        "vitality": 88,
        "community": 24,
        "governance": 49,
        "engineering": 82
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 88,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "commits_last_year": 1016,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 23
            },
            "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": "23/52 weeks with commits",
                "points": 15.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 23
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1016 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1016
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 17,
              "latest_release_tag": "v0.4.1",
              "releases_from_tags": false,
              "days_since_latest_release": 26,
              "mean_days_between_releases": 3.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "17 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 26 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 26
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 49,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 14,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.962
            },
            "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 96% of commits",
                "points": 0.9,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 54,
            "inputs": {
              "merged_prs": 3,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "3/4 decided PRs merged",
                "points": 28.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 3,
                      "decided": 4
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 44,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "amarbel-llc",
              "public_repos": 56,
              "account_age_days": 169
            },
            "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 amarbel-llc",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "amarbel-llc"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "56 public repos, account ~0 yr old",
                "points": 13.7,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 56
                    }
                  },
                  {
                    "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": [
                "code.linenisgreat.com/purse-first"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 9
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 9 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "14 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 82,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "claude-code",
                "golang",
                "mcp",
                "nix-flake",
                "package-framework",
                "plugin-system",
                "rust"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "7 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 31,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 3.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "16 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 66,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.7,
              "agent_instruction_files": [
                "CLAUDE.md",
                "libs/dewey/CLAUDE.md",
                "libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md",
                "libs/dewey/internal/0/bech32/CLAUDE.md",
                "libs/dewey/internal/0/box_chars/CLAUDE.md",
                "libs/dewey/internal/0/equality/CLAUDE.md",
                "libs/dewey/internal/0/exec/CLAUDE.md",
                "libs/dewey/internal/0/flag_policy/CLAUDE.md",
                "libs/dewey/internal/0/hecks/CLAUDE.md",
                "libs/dewey/internal/0/http_statuses/CLAUDE.md",
                "libs/dewey/internal/0/interfaces/CLAUDE.md",
                "libs/dewey/internal/0/primordial/CLAUDE.md",
                "libs/dewey/internal/0/reset/CLAUDE.md",
                "libs/dewey/internal/0/stack_frame/CLAUDE.md",
                "libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md",
                "libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md",
                "libs/dewey/internal/alfa/cmp/CLAUDE.md",
                "libs/dewey/internal/alfa/collections_coding/CLAUDE.md",
                "libs/dewey/internal/alfa/collections_map/CLAUDE.md",
                "libs/dewey/internal/alfa/equals/CLAUDE.md",
                "libs/dewey/internal/alfa/pool/CLAUDE.md",
                "libs/dewey/internal/alfa/quiter_collection/CLAUDE.md",
                "libs/dewey/internal/alfa/quiter_seq/CLAUDE.md",
                "libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md",
                "libs/dewey/internal/alfa/unicorn/CLAUDE.md",
                "libs/dewey/internal/bravo/collections_slice/CLAUDE.md",
                "libs/dewey/internal/bravo/errors/CLAUDE.md",
                "libs/dewey/internal/charlie/comments/CLAUDE.md",
                "libs/dewey/internal/charlie/delim_reader/CLAUDE.md",
                "libs/dewey/internal/charlie/env_vars/CLAUDE.md",
                "libs/dewey/internal/charlie/expansion/CLAUDE.md",
                "libs/dewey/internal/charlie/flags/CLAUDE.md",
                "libs/dewey/internal/charlie/lua/CLAUDE.md",
                "libs/dewey/internal/charlie/ohio/CLAUDE.md",
                "libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md",
                "libs/dewey/internal/charlie/quiter/CLAUDE.md",
                "libs/dewey/internal/charlie/quiter_set/CLAUDE.md",
                "libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md",
                "libs/dewey/internal/charlie/ui/CLAUDE.md",
                "libs/dewey/internal/charlie/values/CLAUDE.md",
                "libs/dewey/internal/delta/catgut/CLAUDE.md",
                "libs/dewey/internal/delta/cli/CLAUDE.md",
                "libs/dewey/internal/delta/collections/CLAUDE.md",
                "libs/dewey/internal/delta/collections_ptr/CLAUDE.md",
                "libs/dewey/internal/delta/collections_value/CLAUDE.md",
                "libs/dewey/internal/delta/delim_io/CLAUDE.md",
                "libs/dewey/internal/delta/files/CLAUDE.md",
                "libs/dewey/internal/delta/format/CLAUDE.md",
                "libs/dewey/internal/delta/heap/CLAUDE.md",
                "libs/dewey/internal/delta/script_config/CLAUDE.md",
                "libs/dewey/internal/delta/thyme/CLAUDE.md",
                "libs/dewey/internal/delta/tridex/CLAUDE.md",
                "libs/dewey/internal/delta/trie/CLAUDE.md",
                "libs/dewey/internal/delta/xdg_defaults/CLAUDE.md",
                "libs/dewey/internal/echo/age/CLAUDE.md",
                "libs/dewey/internal/echo/alfred/CLAUDE.md",
                "libs/dewey/internal/echo/collections_delta/CLAUDE.md",
                "libs/dewey/internal/echo/command/CLAUDE.md",
                "libs/dewey/internal/echo/debug/CLAUDE.md",
                "libs/dewey/internal/echo/editor/CLAUDE.md",
                "libs/dewey/internal/echo/ohio_files/CLAUDE.md",
                "libs/dewey/internal/echo/script_value/CLAUDE.md",
                "libs/dewey/internal/echo/xdg/CLAUDE.md",
                "libs/dewey/internal/foxtrot/config_cli/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 16698
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md, libs/dewey/CLAUDE.md, libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md, libs/dewey/internal/0/bech32/CLAUDE.md, libs/dewey/internal/0/box_chars/CLAUDE.md, libs/dewey/internal/0/equality/CLAUDE.md, libs/dewey/internal/0/exec/CLAUDE.md, libs/dewey/internal/0/flag_policy/CLAUDE.md, libs/dewey/internal/0/hecks/CLAUDE.md, libs/dewey/internal/0/http_statuses/CLAUDE.md, libs/dewey/internal/0/interfaces/CLAUDE.md, libs/dewey/internal/0/primordial/CLAUDE.md, libs/dewey/internal/0/reset/CLAUDE.md, libs/dewey/internal/0/stack_frame/CLAUDE.md, libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md, libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md, libs/dewey/internal/alfa/cmp/CLAUDE.md, libs/dewey/internal/alfa/collections_coding/CLAUDE.md, libs/dewey/internal/alfa/collections_map/CLAUDE.md, libs/dewey/internal/alfa/equals/CLAUDE.md, libs/dewey/internal/alfa/pool/CLAUDE.md, libs/dewey/internal/alfa/quiter_collection/CLAUDE.md, libs/dewey/internal/alfa/quiter_seq/CLAUDE.md, libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md, libs/dewey/internal/alfa/unicorn/CLAUDE.md, libs/dewey/internal/bravo/collections_slice/CLAUDE.md, libs/dewey/internal/bravo/errors/CLAUDE.md, libs/dewey/internal/charlie/comments/CLAUDE.md, libs/dewey/internal/charlie/delim_reader/CLAUDE.md, libs/dewey/internal/charlie/env_vars/CLAUDE.md, libs/dewey/internal/charlie/expansion/CLAUDE.md, libs/dewey/internal/charlie/flags/CLAUDE.md, libs/dewey/internal/charlie/lua/CLAUDE.md, libs/dewey/internal/charlie/ohio/CLAUDE.md, libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md, libs/dewey/internal/charlie/quiter/CLAUDE.md, libs/dewey/internal/charlie/quiter_set/CLAUDE.md, libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md, libs/dewey/internal/charlie/ui/CLAUDE.md, libs/dewey/internal/charlie/values/CLAUDE.md, libs/dewey/internal/delta/catgut/CLAUDE.md, libs/dewey/internal/delta/cli/CLAUDE.md, libs/dewey/internal/delta/collections/CLAUDE.md, libs/dewey/internal/delta/collections_ptr/CLAUDE.md, libs/dewey/internal/delta/collections_value/CLAUDE.md, libs/dewey/internal/delta/delim_io/CLAUDE.md, libs/dewey/internal/delta/files/CLAUDE.md, libs/dewey/internal/delta/format/CLAUDE.md, libs/dewey/internal/delta/heap/CLAUDE.md, libs/dewey/internal/delta/script_config/CLAUDE.md, libs/dewey/internal/delta/thyme/CLAUDE.md, libs/dewey/internal/delta/tridex/CLAUDE.md, libs/dewey/internal/delta/trie/CLAUDE.md, libs/dewey/internal/delta/xdg_defaults/CLAUDE.md, libs/dewey/internal/echo/age/CLAUDE.md, libs/dewey/internal/echo/alfred/CLAUDE.md, libs/dewey/internal/echo/collections_delta/CLAUDE.md, libs/dewey/internal/echo/command/CLAUDE.md, libs/dewey/internal/echo/debug/CLAUDE.md, libs/dewey/internal/echo/editor/CLAUDE.md, libs/dewey/internal/echo/ohio_files/CLAUDE.md, libs/dewey/internal/echo/script_value/CLAUDE.md, libs/dewey/internal/echo/xdg/CLAUDE.md, libs/dewey/internal/foxtrot/config_cli/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md, libs/dewey/CLAUDE.md, libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md, libs/dewey/internal/0/bech32/CLAUDE.md, libs/dewey/internal/0/box_chars/CLAUDE.md, libs/dewey/internal/0/equality/CLAUDE.md, libs/dewey/internal/0/exec/CLAUDE.md, libs/dewey/internal/0/flag_policy/CLAUDE.md, libs/dewey/internal/0/hecks/CLAUDE.md, libs/dewey/internal/0/http_statuses/CLAUDE.md, libs/dewey/internal/0/interfaces/CLAUDE.md, libs/dewey/internal/0/primordial/CLAUDE.md, libs/dewey/internal/0/reset/CLAUDE.md, libs/dewey/internal/0/stack_frame/CLAUDE.md, libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md, libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md, libs/dewey/internal/alfa/cmp/CLAUDE.md, libs/dewey/internal/alfa/collections_coding/CLAUDE.md, libs/dewey/internal/alfa/collections_map/CLAUDE.md, libs/dewey/internal/alfa/equals/CLAUDE.md, libs/dewey/internal/alfa/pool/CLAUDE.md, libs/dewey/internal/alfa/quiter_collection/CLAUDE.md, libs/dewey/internal/alfa/quiter_seq/CLAUDE.md, libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md, libs/dewey/internal/alfa/unicorn/CLAUDE.md, libs/dewey/internal/bravo/collections_slice/CLAUDE.md, libs/dewey/internal/bravo/errors/CLAUDE.md, libs/dewey/internal/charlie/comments/CLAUDE.md, libs/dewey/internal/charlie/delim_reader/CLAUDE.md, libs/dewey/internal/charlie/env_vars/CLAUDE.md, libs/dewey/internal/charlie/expansion/CLAUDE.md, libs/dewey/internal/charlie/flags/CLAUDE.md, libs/dewey/internal/charlie/lua/CLAUDE.md, libs/dewey/internal/charlie/ohio/CLAUDE.md, libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md, libs/dewey/internal/charlie/quiter/CLAUDE.md, libs/dewey/internal/charlie/quiter_set/CLAUDE.md, libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md, libs/dewey/internal/charlie/ui/CLAUDE.md, libs/dewey/internal/charlie/values/CLAUDE.md, libs/dewey/internal/delta/catgut/CLAUDE.md, libs/dewey/internal/delta/cli/CLAUDE.md, libs/dewey/internal/delta/collections/CLAUDE.md, libs/dewey/internal/delta/collections_ptr/CLAUDE.md, libs/dewey/internal/delta/collections_value/CLAUDE.md, libs/dewey/internal/delta/delim_io/CLAUDE.md, libs/dewey/internal/delta/files/CLAUDE.md, libs/dewey/internal/delta/format/CLAUDE.md, libs/dewey/internal/delta/heap/CLAUDE.md, libs/dewey/internal/delta/script_config/CLAUDE.md, libs/dewey/internal/delta/thyme/CLAUDE.md, libs/dewey/internal/delta/tridex/CLAUDE.md, libs/dewey/internal/delta/trie/CLAUDE.md, libs/dewey/internal/delta/xdg_defaults/CLAUDE.md, libs/dewey/internal/echo/age/CLAUDE.md, libs/dewey/internal/echo/alfred/CLAUDE.md, libs/dewey/internal/echo/collections_delta/CLAUDE.md, libs/dewey/internal/echo/command/CLAUDE.md, libs/dewey/internal/echo/debug/CLAUDE.md, libs/dewey/internal/echo/editor/CLAUDE.md, libs/dewey/internal/echo/ohio_files/CLAUDE.md, libs/dewey/internal/echo/script_value/CLAUDE.md, libs/dewey/internal/echo/xdg/CLAUDE.md, libs/dewey/internal/foxtrot/config_cli/CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "70 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 37.3,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 70,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": true,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [
                "justfile",
                "libs/go-mcp/justfile",
                "zz-tests_bats/rfc-0001/justfile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "cmd/golangci-lint-dewey/go.mod",
                "go.mod",
                "libs/dewey/go.mod",
                "libs/go-mcp/command/huh/go.mod",
                "libs/go-mcp/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "justfile, libs/go-mcp/justfile, zz-tests_bats/rfc-0001/justfile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "justfile, libs/go-mcp/justfile, zz-tests_bats/rfc-0001/justfile"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Nix, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Nix, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "MDX",
              "largest_source_bytes": 92665,
              "source_files_sampled": 730,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "MDX without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "MDX"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/730 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 730,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": true,
              "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": 20,
                "status": "met",
                "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-29T23:12:36.156345Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/amarbel-llc/purse-first.svg",
  "full_name": "amarbel-llc/purse-first",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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