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

forwardimpact / monorepo

Applications that help teams grow and cultivate world-class engineers in the age of AI

JavaScriptApache-2.0★ 3 estrellas⑂ 0 forksdesde ene 2026Ver en GitHub ↗

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

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

65
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

0 seguidores20 repositorios públicosdesde ene 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
npmfit-rc0.1.403794hace 5 días
npmfit-doc0.2.372562hace 22 días
npmfit-rag0.1.01101hace 5 días
npmfit-guide0.1.532845hace 5 días
npmfit-unary0.1.1113834hace 5 días
npmfit-logger0.1.321691hace 19 días

Métricas por categoría

Vitalidad

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

86Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
19.4/36Cadencia de commits — 28/52 semanas con commits
18/18Volumen de commits — 3471 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_year3471
human_commit_share1
days_since_last_push0
active_weeks_last_year28
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 2 días
27/27Cadencia de publicación — una versión cada ~0,6 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count100
latest_release_taggear@v0.3.2
releases_from_tagsno
days_since_latest_release2
mean_days_between_releases0,6

Comunidad y Adopción

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

40En riesgo · 18% del índice global
Cómo se puntúa
4.9/60Estrellas — 3 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars3
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 (Apache-2.0)
18/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_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
42.7/80Descargas mensuales — 1581 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesfit-rc, fit-doc, fit-rag, fit-guide, fit-unary, fit-logger
dependents
ecosystemsnpm
total_downloads
monthly_downloads1581
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

58Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
4/22.5Distribución de commits — el principal contribuyente firma el 82% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,824
Cómo se puntúa
43.6/46.8Resolución de issues — 93% de issues cerradas
34.5/38.3Aceptación de PR — 1372/1520 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs1372
open_issues29
closed_issues395
issue_closed_ratio0,932
closed_unmerged_prs148
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 forwardimpact
10.7/25Trayectoria — 20 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_loginforwardimpact
public_repos20
account_age_days192
Cómo se puntúa
25/25Publicado y resoluble — 6 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 5 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesfit-rc, fit-doc, fit-rag, fit-guide, fit-unary, fit-logger
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

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

76Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 30 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — biome.json, eslint.config.js
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 26 out of 26 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

65Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — http://www.forwardimpact.team
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepagehttp://www.forwardimpact.team
has_readme
has_docs_dirno
has_description

Seguridad

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

62Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 26 out of 26 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 3 contributing companies or organizations -- score normalized to 10
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
4/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
3/7.5Vulnerabilities — 6 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,2
Excluidos de la puntuación (sin datos o no aplicable): packaging. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages116
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de npm:fit-rc@0.1.40 —lo que arrastra la instalación del paquete publicado—: 116 paquetes. No se analiza la alcanzabilidad.

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.

78Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .claude/skills/CLAUDE.md, .github/CLAUDE.md, CLAUDE.md, config/CLAUDE.md, libraries/CLAUDE.md, libraries/libbridge/CLAUDE.md, libraries/libconfig/CLAUDE.md, products/CLAUDE.md, products/guide/CLAUDE.md, products/map/CLAUDE.md, products/outpost/CLAUDE.md, products/outpost/templates/CLAUDE.md, references/CLAUDE.md, services/CLAUDE.md, websites/CLAUDE.md
15/15Documentación legible por máquinas (llms.txt) — llms.txt presente
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txt
legible_history_share1
agent_instruction_files.claude/skills/CLAUDE.md, .github/CLAUDE.md, CLAUDE.md, config/CLAUDE.md, libraries/CLAUDE.md, libraries/libbridge/CLAUDE.md, libraries/libconfig/CLAUDE.md, products/CLAUDE.md, products/guide/CLAUDE.md, products/map/CLAUDE.md, products/outpost/CLAUDE.md, products/outpost/templates/CLAUDE.md, references/CLAUDE.md, services/CLAUDE.md, websites/CLAUDE.md
agent_instruction_max_bytes7904
Cómo se puntúa
18/18Arranque con un solo comando — design/justfile, justfile, websites/fit/justfile, websites/jidoka/justfile, websites/kata/justfile, websites/monorepo/justfile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — biome.json, eslint.config.js
0/11Verificación estática de tipos
10/10Entorno reproducible — devcontainer, Dockerfile
10/10Práctica demostrada con agentes — 92 de los últimos 100 commits con autoría o crédito de agente
5/8Mantenimiento automatizado — automatización de dependencias configurada, no observada en los commits muestreados
8/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfile
typed_languageno
bootstrap_filesdesign/justfile, justfile, websites/fit/justfile, websites/jidoka/justfile, websites/kata/justfile, websites/monorepo/justfile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0,92
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — JavaScript sin configuración de verificación de tipos
55/55Tamaños de archivo manejables — 1/1641 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJavaScript
largest_source_bytes61.828
source_files_sampled1641
oversized_source_files1
Cómo se puntúa
40/40Esquema de API (OpenAPI/GraphQL/proto) — libraries/libproto/proto/common.proto, libraries/libproto/proto/resource.proto, libraries/libproto/proto/tool.proto, services/bridge/proto/bridge.proto, services/embedding/proto/embedding.proto, services/ghserver/proto/ghserver.proto, services/ghuser/proto/ghuser.proto, services/graph/proto/graph.proto, services/map/proto/map.proto, services/pathway/proto/pathway.proto, services/span/proto/span.proto, services/tenancy/proto/tenancy.proto, services/vector/proto/vector.proto
0/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signalno
api_schema_fileslibraries/libproto/proto/common.proto, libraries/libproto/proto/resource.proto, libraries/libproto/proto/tool.proto, services/bridge/proto/bridge.proto, services/embedding/proto/embedding.proto, services/ghserver/proto/ghserver.proto, services/ghuser/proto/ghuser.proto, services/graph/proto/graph.proto, services/map/proto/map.proto, services/pathway/proto/pathway.proto, services/span/proto/span.proto, services/tenancy/proto/tenancy.proto, services/vector/proto/vector.proto

Datos clave

3estrellas de GitHub
2contribuidores
3471commits en los últimos 12 meses
0días desde el último push
100versiones publicadas
1factor bus
29issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'fit-map' from its registry
  • Could not fetch npm package 'fit-pack' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 5.2 / 10
5.2agregado

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-24 03:36 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests26 out of 26 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
8Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 8
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
4Vulnerabilities6 existing vulnerabilities detected
Dependencias directas 21
RegistroPaqueteRestricción de versiónManifiesto
npmforwardimpact-monorepo.package.json
npm@forwardimpact/libcodegen0.0.0launchers/fit-codegen/package.json
npm@forwardimpact/libdoc0.0.0launchers/fit-doc/package.json
npm@forwardimpact/guide0.0.0launchers/fit-guide/package.json
npm@forwardimpact/landmark0.0.0launchers/fit-landmark/package.json
npm@forwardimpact/libsupervise0.0.0launchers/fit-logger/package.json
npm@forwardimpact/map0.0.0launchers/fit-map/package.json
npm@forwardimpact/outpost0.0.0launchers/fit-outpost/package.json
npm@forwardimpact/libpack0.0.0launchers/fit-pack/package.json
npm@forwardimpact/pathway0.0.0launchers/fit-pathway/package.json
npm@forwardimpact/librag0.0.0launchers/fit-process/package.json
npm@forwardimpact/librag0.0.0launchers/fit-rag/package.json
npm@forwardimpact/librc0.0.0launchers/fit-rc/package.json
npm@forwardimpact/summit0.0.0launchers/fit-summit/package.json
npm@forwardimpact/libsupervise0.0.0launchers/fit-svscan/package.json
npm@forwardimpact/libterrain0.0.0launchers/fit-terrain/package.json
npm@forwardimpact/librpc0.0.0launchers/fit-unary/package.json
npm@forwardimpact/libtelemetry0.0.0launchers/fit-visualize/package.json
npm@forwardimpact/gemba0.0.0launchers/gemba-benchmark/package.json
npm@forwardimpact/gemba0.0.0launchers/gemba-harness/package.json
npm@forwardimpact/gemba0.0.0launchers/gemba-trace/package.json
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

Avisos de dependencias 0

Instalar npm:fit-rc@0.1.40 arrastra 116 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 57422,
      "has_wiki": true,
      "homepage": "http://www.forwardimpact.team",
      "languages": {
        "ASL": 41062,
        "CSS": 230258,
        "HTML": 66773,
        "Just": 15042,
        "Shell": 94549,
        "Swift": 35288,
        "Python": 818,
        "PLpgSQL": 7478,
        "Mustache": 8751,
        "Dockerfile": 1671,
        "Handlebars": 1002,
        "JavaScript": 8063060,
        "TypeScript": 4402
      },
      "pushed_at": "2026-07-24T03:36:06Z",
      "created_at": "2026-01-14T17:26:39Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T23:16:20Z",
      "description": "Applications that help teams grow and cultivate world-class engineers in the age of AI",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "https://forwardimpact.team/",
      "name": "Forward Impact Engineering",
      "type": "Organization",
      "login": "forwardimpact",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/254527721?v=4",
      "created_at": "2026-01-12T18:48:41Z",
      "is_verified": null,
      "public_repos": 20,
      "account_age_days": 192
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "gear@v0.3.2",
          "kind": "other",
          "published_at": "2026-07-21T20:08:13Z"
        },
        {
          "tag": "gear@v0.3.1",
          "kind": "other",
          "published_at": "2026-07-21T20:01:14Z"
        },
        {
          "tag": "gear@v0.3.0",
          "kind": "other",
          "published_at": "2026-07-21T07:04:14Z"
        },
        {
          "tag": "gear@v0.2.0",
          "kind": "other",
          "published_at": "2026-07-20T12:10:16Z"
        },
        {
          "tag": "gear@v0.1.23",
          "kind": "other",
          "published_at": "2026-07-19T11:18:44Z"
        },
        {
          "tag": "map@v0.15.64",
          "kind": "other",
          "published_at": "2026-07-19T11:12:27Z"
        },
        {
          "tag": "gear@v0.1.22",
          "kind": "other",
          "published_at": "2026-07-19T08:08:47Z"
        },
        {
          "tag": "outpost@v3.12.0",
          "kind": "other",
          "published_at": "2026-07-19T08:03:38Z"
        },
        {
          "tag": "guide@v0.1.53",
          "kind": "other",
          "published_at": "2026-07-19T08:02:48Z"
        },
        {
          "tag": "gear@v0.1.21",
          "kind": "other",
          "published_at": "2026-07-16T08:42:29Z"
        },
        {
          "tag": "gear@v0.1.20",
          "kind": "other",
          "published_at": "2026-07-15T18:24:00Z"
        },
        {
          "tag": "gear@v0.1.17",
          "kind": "other",
          "published_at": "2026-07-14T13:05:43Z"
        },
        {
          "tag": "gear@v0.1.16",
          "kind": "other",
          "published_at": "2026-07-13T15:46:58Z"
        },
        {
          "tag": "gear@v0.1.15",
          "kind": "other",
          "published_at": "2026-07-13T13:41:17Z"
        },
        {
          "tag": "map@v0.15.63",
          "kind": "other",
          "published_at": "2026-07-13T13:34:04Z"
        },
        {
          "tag": "landmark@v0.1.31",
          "kind": "other",
          "published_at": "2026-07-13T13:33:23Z"
        },
        {
          "tag": "summit@v0.1.31",
          "kind": "other",
          "published_at": "2026-07-13T13:32:55Z"
        },
        {
          "tag": "pathway@v0.26.9",
          "kind": "other",
          "published_at": "2026-07-13T13:31:57Z"
        },
        {
          "tag": "summit@v0.1.30",
          "kind": "other",
          "published_at": "2026-07-04T09:37:33Z"
        },
        {
          "tag": "map@v0.15.62",
          "kind": "other",
          "published_at": "2026-07-04T09:37:20Z"
        },
        {
          "tag": "landmark@v0.1.30",
          "kind": "other",
          "published_at": "2026-07-04T09:37:18Z"
        },
        {
          "tag": "gear@v0.1.14",
          "kind": "other",
          "published_at": "2026-07-04T03:03:57Z"
        },
        {
          "tag": "outpost@v3.11.0",
          "kind": "other",
          "published_at": "2026-07-03T21:59:09Z"
        },
        {
          "tag": "outpost@v3.10.0",
          "kind": "other",
          "published_at": "2026-07-01T17:26:47Z"
        },
        {
          "tag": "pathway@v0.26.8",
          "kind": "other",
          "published_at": "2026-07-01T17:25:58Z"
        },
        {
          "tag": "guide@v0.1.52",
          "kind": "other",
          "published_at": "2026-07-01T17:25:33Z"
        },
        {
          "tag": "gear@v0.1.13",
          "kind": "other",
          "published_at": "2026-07-01T17:33:23Z"
        },
        {
          "tag": "gear@v0.1.12",
          "kind": "other",
          "published_at": "2026-06-29T20:06:55Z"
        },
        {
          "tag": "gear@v0.1.11",
          "kind": "other",
          "published_at": "2026-06-29T16:22:06Z"
        },
        {
          "tag": "gear@v0.1.10",
          "kind": "other",
          "published_at": "2026-06-29T02:51:32Z"
        },
        {
          "tag": "gear@v0.1.9",
          "kind": "other",
          "published_at": "2026-06-27T23:33:19Z"
        },
        {
          "tag": "gear@v0.1.8",
          "kind": "other",
          "published_at": "2026-06-27T22:38:24Z"
        },
        {
          "tag": "outpost@v3.9.0",
          "kind": "other",
          "published_at": "2026-06-27T12:34:01Z"
        },
        {
          "tag": "gear@v0.1.7",
          "kind": "other",
          "published_at": "2026-06-27T04:31:51Z"
        },
        {
          "tag": "outpost@v3.8.1",
          "kind": "other",
          "published_at": "2026-06-25T23:25:24Z"
        },
        {
          "tag": "landmark@v0.1.29",
          "kind": "other",
          "published_at": "2026-06-25T23:24:08Z"
        },
        {
          "tag": "summit@v0.1.29",
          "kind": "other",
          "published_at": "2026-06-25T23:24:08Z"
        },
        {
          "tag": "map@v0.15.61",
          "kind": "other",
          "published_at": "2026-06-25T23:23:53Z"
        },
        {
          "tag": "pathway@v0.26.7",
          "kind": "other",
          "published_at": "2026-06-25T23:23:53Z"
        },
        {
          "tag": "outpost@v3.8.0",
          "kind": "other",
          "published_at": "2026-06-25T13:51:37Z"
        },
        {
          "tag": "outpost@v3.7.0",
          "kind": "other",
          "published_at": "2026-06-25T09:09:51Z"
        },
        {
          "tag": "outpost@v3.6.0",
          "kind": "other",
          "published_at": "2026-06-24T18:25:21Z"
        },
        {
          "tag": "pathway@v0.26.6",
          "kind": "other",
          "published_at": "2026-06-23T19:42:52Z"
        },
        {
          "tag": "outpost@v3.5.1",
          "kind": "other",
          "published_at": "2026-06-21T22:08:12Z"
        },
        {
          "tag": "landmark@v0.1.28",
          "kind": "other",
          "published_at": "2026-06-23T19:42:43Z"
        },
        {
          "tag": "outpost@v3.5.0",
          "kind": "other",
          "published_at": "2026-06-23T19:42:37Z"
        },
        {
          "tag": "gear@v0.1.6",
          "kind": "other",
          "published_at": "2026-06-23T19:46:37Z"
        },
        {
          "tag": "guide@v0.1.51",
          "kind": "other",
          "published_at": "2026-06-23T19:41:32Z"
        },
        {
          "tag": "pathway@v0.26.5",
          "kind": "other",
          "published_at": "2026-06-23T19:41:22Z"
        },
        {
          "tag": "map@v0.15.60",
          "kind": "other",
          "published_at": "2026-06-23T19:41:14Z"
        },
        {
          "tag": "outpost@v3.4.0",
          "kind": "other",
          "published_at": "2026-06-19T17:42:51Z"
        },
        {
          "tag": "outpost@v3.3.2",
          "kind": "other",
          "published_at": "2026-06-17T15:28:46Z"
        },
        {
          "tag": "outpost@v3.3.1",
          "kind": "other",
          "published_at": "2026-06-17T14:51:57Z"
        },
        {
          "tag": "landmark@v0.1.27",
          "kind": "other",
          "published_at": "2026-06-15T06:09:18Z"
        },
        {
          "tag": "guide@v0.1.50",
          "kind": "other",
          "published_at": "2026-06-15T06:08:54Z"
        },
        {
          "tag": "map@v0.15.59",
          "kind": "other",
          "published_at": "2026-06-15T06:04:54Z"
        },
        {
          "tag": "pathway@v0.26.4",
          "kind": "other",
          "published_at": "2026-06-12T14:03:48Z"
        },
        {
          "tag": "summit@v0.1.28",
          "kind": "other",
          "published_at": "2026-06-12T14:02:39Z"
        },
        {
          "tag": "outpost@v3.3.0",
          "kind": "other",
          "published_at": "2026-06-12T14:01:45Z"
        },
        {
          "tag": "landmark@v0.1.26",
          "kind": "other",
          "published_at": "2026-06-12T13:59:46Z"
        },
        {
          "tag": "guide@v0.1.49",
          "kind": "other",
          "published_at": "2026-06-12T13:49:36Z"
        },
        {
          "tag": "map@v0.15.58",
          "kind": "other",
          "published_at": "2026-06-12T13:47:29Z"
        },
        {
          "tag": "pathway@v0.26.3",
          "kind": "other",
          "published_at": "2026-06-12T07:29:02Z"
        },
        {
          "tag": "outpost@v3.2.2",
          "kind": "other",
          "published_at": "2026-06-12T00:02:49Z"
        },
        {
          "tag": "outpost@v3.2.1",
          "kind": "other",
          "published_at": "2026-06-11T23:30:19Z"
        },
        {
          "tag": "map@v0.15.57",
          "kind": "other",
          "published_at": "2026-06-11T01:56:07Z"
        },
        {
          "tag": "landmark@v0.1.25",
          "kind": "other",
          "published_at": "2026-06-11T01:55:42Z"
        },
        {
          "tag": "guide@v0.1.48",
          "kind": "other",
          "published_at": "2026-06-11T01:55:29Z"
        },
        {
          "tag": "gear@v0.1.5",
          "kind": "other",
          "published_at": "2026-06-10T23:48:39Z"
        },
        {
          "tag": "guide@v0.1.47",
          "kind": "other",
          "published_at": "2026-06-10T13:02:43Z"
        },
        {
          "tag": "landmark@v0.1.24",
          "kind": "other",
          "published_at": "2026-06-09T07:23:11Z"
        },
        {
          "tag": "map@v0.15.56",
          "kind": "other",
          "published_at": "2026-06-09T07:22:55Z"
        },
        {
          "tag": "summit@v0.1.27",
          "kind": "other",
          "published_at": "2026-06-09T07:22:14Z"
        },
        {
          "tag": "svcoauth@v0.1.0",
          "kind": "other",
          "published_at": "2026-06-09T02:13:45Z"
        },
        {
          "tag": "svcghuser@v0.1.0",
          "kind": "other",
          "published_at": "2026-06-09T02:13:42Z"
        },
        {
          "tag": "outpost@v3.2.0",
          "kind": "other",
          "published_at": "2026-06-08T08:19:39Z"
        },
        {
          "tag": "map@v0.15.55",
          "kind": "other",
          "published_at": "2026-06-07T16:10:06Z"
        },
        {
          "tag": "pathway@v0.26.2",
          "kind": "other",
          "published_at": "2026-06-05T06:50:43Z"
        },
        {
          "tag": "outpost@v3.1.4",
          "kind": "other",
          "published_at": "2026-05-31T20:10:10Z"
        },
        {
          "tag": "summit@v0.1.26",
          "kind": "other",
          "published_at": "2026-05-31T20:10:10Z"
        },
        {
          "tag": "map@v0.15.54",
          "kind": "other",
          "published_at": "2026-05-31T20:09:26Z"
        },
        {
          "tag": "pathway@v0.26.1",
          "kind": "other",
          "published_at": "2026-05-31T20:09:16Z"
        },
        {
          "tag": "landmark@v0.1.23",
          "kind": "other",
          "published_at": "2026-05-31T20:09:16Z"
        },
        {
          "tag": "summit@v0.1.25",
          "kind": "other",
          "published_at": "2026-05-31T12:15:18Z"
        },
        {
          "tag": "guide@v0.1.46",
          "kind": "other",
          "published_at": "2026-05-31T12:15:02Z"
        },
        {
          "tag": "pathway@v0.26.0",
          "kind": "other",
          "published_at": "2026-05-31T12:14:52Z"
        },
        {
          "tag": "pathway@v0.25.66",
          "kind": "other",
          "published_at": "2026-05-28T09:45:38Z"
        },
        {
          "tag": "guide@v0.1.45",
          "kind": "other",
          "published_at": "2026-05-28T09:45:19Z"
        },
        {
          "tag": "outpost@v3.1.3",
          "kind": "other",
          "published_at": "2026-05-28T09:44:46Z"
        },
        {
          "tag": "map@v0.15.53",
          "kind": "other",
          "published_at": "2026-05-28T09:44:25Z"
        },
        {
          "tag": "landmark@v0.1.22",
          "kind": "other",
          "published_at": "2026-05-28T09:44:18Z"
        },
        {
          "tag": "summit@v0.1.24",
          "kind": "other",
          "published_at": "2026-05-28T09:44:04Z"
        },
        {
          "tag": "map@v0.15.52",
          "kind": "other",
          "published_at": "2026-05-26T05:40:06Z"
        },
        {
          "tag": "pathway@v0.25.65",
          "kind": "other",
          "published_at": "2026-05-26T05:39:55Z"
        },
        {
          "tag": "summit@v0.1.23",
          "kind": "other",
          "published_at": "2026-05-25T06:46:44Z"
        },
        {
          "tag": "pathway@v0.25.64",
          "kind": "other",
          "published_at": "2026-05-25T06:46:34Z"
        },
        {
          "tag": "landmark@v0.1.21",
          "kind": "other",
          "published_at": "2026-05-25T06:46:27Z"
        },
        {
          "tag": "guide@v0.1.44",
          "kind": "other",
          "published_at": "2026-05-25T06:45:30Z"
        },
        {
          "tag": "outpost@v3.1.2",
          "kind": "other",
          "published_at": "2026-05-25T06:45:30Z"
        },
        {
          "tag": "map@v0.15.51",
          "kind": "other",
          "published_at": "2026-05-25T06:45:24Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a227f32d7bc49250fb2dab370cd88d581b36f558",
          "body": "…an (#1995)\n\n* plan(2270): benchmark trace parity — implementation plan draft\n\nPlan overview plus four parts: shared trace core (identity + split\nmodules), benchmark runtime pipeline, action/workflow contract, and\ndocumentation. Panel review pending; PR opens after a clean panel.\n\nCo-Authored-By: Cl\n[…]\nrt-04 step 6.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Shyc6EN4qu7T6gAQ6Zoz7k\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2270): benchmark trace parity — one trace pipeline, five-file pl…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-23T23:16:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0efbede37f818bb293dc64fae790198b37aa4558",
          "body": "…ivers (#1994)\n\n* design(2270): benchmark trace parity — one trace pipeline for both drivers\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01L7BTGAAGoNYdap5usi9qVq\n\n* design(2270): address panel round 1 — artifact rooting, identity grammar, la\n[…]\n hosts today.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01L7BTGAAGoNYdap5usi9qVq\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2270): benchmark trace parity — one trace pipeline for both dr…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-23T22:19:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "55b764e3c30eb098da2dc869f17881ff5093101e",
          "body": "…s (#1993)\n\nSpec (WHAT/WHY) making gemba-benchmark and the benchmark action produce\nagent traces exactly the way gemba-harness does: raw envelope traces\npreserved per cell, shared trace--<case>--<participant>.<role>.ndjson\nnaming, one shared split implementation, trace--* workflow artifacts on\nthe e\n[…]\nh vulnerability-scanning red:\nthe failure is newly published registry advisories (postcss high,\nhono/@hono/node-server moderates) unrelated to this markdown-only diff;\nsecurity fix follows separately.",
          "is_bot": false,
          "headline": "spec(2270): benchmark trace parity — eval traces as workflow artifact…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-23T21:17:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c13c0cceac47a0099c0e63fc522cd061fefbcde",
          "body": "…s (#1992)\n\n* docs(references): reconcile the bionova-apps reference with current tooling\n\nBring the reference spec in line with the infrastructure the live repo now\nruns on, without importing its feature evolution.\n\n- Mark prerequisites A (--output-root, --schema-dir) and B (prose to SQL)\n  impleme\n[…]\nsfy format-md\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01VdE8eQkxfCLnB4Pmkxo4xN\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(kata): migrate kata-agent and kata-interview actions to gemba CLI…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-22T05:54:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "800d556b5054f9c2091711141b9a17cc10d89d87",
          "body": "v1.0.8 installs the report CLI in the merge job, fixing the\n'gemba-benchmark: command not found' failure both eval workflows hit\nat the merge step.\n\n\nClaude-Session: https://claude.ai/code/session_01YMPZXTtLLYsrB6Q1YuQ2V4\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(ci): bump benchmark reusable workflow to v1.0.8 (#1991)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T20:22:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d0525b7f24472afb65620b12dfe79c0f025d48b3",
          "body": "… (#1990)\n\nFresh upstream advisories landed mid-release and failed the audit gate\non main, the gear npm publish, and the gear binaries publish: fast-uri\n3.0.0-3.1.2 and linkify-it <=5.0.1, both high. Bump the fast-uri\noverride to ^3.1.3, add a linkify-it ^5.0.2 override, and update\nbun.lock so resol\n[…]\noint the\nGEAR_RELEASE pins and the co-versioned installer default accordingly.\n\n\nClaude-Session: https://claude.ai/code/session_01YMPZXTtLLYsrB6Q1YuQ2V4\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): clear high npm audit findings and re-cut gear as 0.3.2…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T19:47:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f8cdd1c0d58a06375f610388511574aaad2906d3",
          "body": "…ll.sh --only (#1989)\n\n* fix(benchmark): install report CLI in the merge job\n\nThe reusable workflow's merge job ran the benchmark action in merge\nmode without installing gemba-benchmark, so the report step failed\nwith 'command not found' (exit 127). The shard job gets the binary\nfrom forwardimpact/b\n[…]\nf-consistent.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YMPZXTtLLYsrB6Q1YuQ2V4\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(benchmark): install the report CLI in the merge job via fit-insta…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T19:31:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "73bf1ff69be3e3c83bbcb77a1f59fd89bab8174c",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(settings): set default permission mode to acceptEdits",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-21T08:51:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3d92fa17e80b1309419e2c11897ad045ce188f6d",
          "body": "Write(path) rules are not matched by file permission checks; the\nexisting Edit(path) rules already cover all file-editing tools.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(settings): drop redundant Write() permission rules",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-21T08:48:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "609c17f9d2af9c6e4084031795423536cafd2e50",
          "body": "The jidoka-pages repo now exists with the workflow-mode Pages deploy;\nwebsite-jidoka.yaml publishes to it like the fit and kata sites.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(websites): record the live Jidoka publishing pipeline (#1988)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T08:17:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b4dee81aab2d6f887b3bbb8c2f339da9a63e7bf5",
          "body": "Flips all 27 forwardimpact/bootstrap pins to the v1.0.18 SHA, whose\nbundled installer defaults to gear@v0.3.0 — the first CI configuration\nthat installs and invokes the jidoka binary end to end, closing the\nrename window.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(ci): repin bootstrap to v1.0.18 (#2260) (#1987)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T07:39:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2c1288af4e872c2c397ab86cf7862b73ea88f294",
          "body": "…986)\n\nThe gear@v0.3.0 bundle carries the jidoka binary (renamed from\ncoaligned); bumping the installer default lets bootstrapped runners\ninstall and invoke it.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(bootstrap): default FIT_GEAR_RELEASE to gear@v0.3.0 (#2260) (#1…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T07:12:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59423e6c90e14b7969dd4ea80dc0d8a53b7394f4",
          "body": null,
          "is_bot": false,
          "headline": "docs: fix heading levels in CONTRIBUTING.md",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-21T06:58:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09f024ff753fb1386f3446bf8954b0b4646e04f4",
          "body": "The jidoka binary replaces coaligned in the gear bundle; 0.x minor\nsignals the renamed binary set.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(gear): bump to 0.3.0 (#2260) (#1985)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T06:26:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6f53f55cddedf902adb4052934dbef7ab84bf1a0",
          "body": "…verrides (#1983)\n\n* feat(jidoka): CLI + library axis — jidoka product, libinvariant rename (#2260)\n\nPart 1 of plan 2260-a: products/jidoka package with the moved bin,\nlibcoaligned → libinvariant rename (bin and branded discovery default\nremoved, findInvariantsRoot gains a rulesDir parameter), .coal\n[…]\nreturns 0 vulnerabilities.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): bump axios, body-parser, brace-expansion, protobufjs o…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T06:02:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f92375101a6d950a995351d3ed6d6d7916acf3cf",
          "body": "* feat(jidoka): CLI + library axis — jidoka product, libinvariant rename (#2260)\n\nPart 1 of plan 2260-a: products/jidoka package with the moved bin,\nlibcoaligned → libinvariant rename (bin and branded discovery default\nremoved, findInvariantsRoot gains a rulesDir parameter), .coaligned →\n.jidoka con\n[…]\nt\nper design § Interfaces.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(jidoka): reframe Co-Aligned as the Jidoka product (#2260) (#1980)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-21T05:30:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7f5de36bc90444bfaf3554b466b5f98311f7ad09",
          "body": "…1982)\n\nPart 4 Step 4.3, stage 2. eval-kata and eval-coaligned move to the\nbenchmark sibling SHA produced by the stage-1 merge — the first\nprojection whose nested bootstrap pin (v1.0.17) installs the\ngemba-benchmark binary its own clis: line requests.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(ci): repin the reusable benchmark workflow to v1.0.7 (#2250) (#…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-20T12:50:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e43c07f24c2f9f7f54e9e55b3d903d291f7d57f6",
          "body": "…) (#1981)\n\nPart 4 Step 4.3, stage 1. Every bootstrap pin moves to v1.0.17\n(71bd7553 — installs the gemba-* binaries from gear@v0.2.0); harness to\nv1.0.4 (f1943c61), wiki to v1.0.2 (ad004295), benchmark to v1.0.6\n(9cf5ddb6) — the re-seeded projections carrying the renamed steps. The\nclis: values and\n[…]\na lane, issue #1978) and the\nbenchmarks/fit-wiki eval-family path reference (permanent keep).\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(ci): repin agent-run actions and flip CLI names to gemba (#2250…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-20T12:43:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "951e6f9e87db8db0bf597442c109afb4d543ab6b",
          "body": "…977)\n\nPart 4 Step 4.2. The gear@v0.2.0 release is the first that ships the\ngemba-named binaries, so the bundled installer's default pin moves to it;\ncallers may still override via FIT_GEAR_RELEASE.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(bootstrap): default FIT_GEAR_RELEASE to gear@v0.2.0 (#2250) (#1…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-20T12:34:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f8e1f0e4e7dacc5e28be085141d63135abbe3181",
          "body": "…ear 0.2.0 (#2250) (#1976)\n\nSpec 2250 Part 4 Step 4.1 version arithmetic. libharness and libxmr take\nmajors (bin field and ./bin/* exports removed — breaking); libwiki takes\nthe 0.x minor that signals the same break and re-ranges onto\nlibharness/libxmr ^3.0.0; gemba stays at its first-release 0.1.0 \n[…]\nersions; gear takes the 0.x minor for the\ndependency break (three runtime libraries dropped).\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): bump libharness 3.0.0, libxmr 3.0.0, libwiki 0.3.0, g…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-20T07:14:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "794753171c640438e459a5db70de2355f2767c23",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: switch defaultMode from bypassPermissions to auto",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-20T06:50:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d41612b78c3cb259b276d2f652d5bd9168bb1021",
          "body": "* plan(2260): reframe Co-Aligned as the Jidoka product\n\nImplementation plan for the approved design: overview plus four parts\n(CLI+library axis, actions+CI axis, brand surfaces, release train).\nPanel review in progress; amendments may follow.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nC\n[…]\n in plan-a-01\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01GiD7fUtnNXkoU3EArKCMxQ\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2260): reframe Co-Aligned as the Jidoka product (#1975)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-20T05:29:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c99d9a7eb9c8c0a383102c3ca9b721f235b1f05e",
          "body": "* spec(2260): reframe Co-Aligned as the Jidoka product\n\nDraft spec + design (lockstep co-execution): rename libcoaligned to\nlibinvariant, introduce products/jidoka/ owning the jidoka CLI and the\npublished jidoka action, rebrand the standard, website, skills, pack,\nlauncher, and config directory, wit\n[…]\nthe lint ban.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01PY48JGmm9A2JXSzHxRvgDH\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2260): reframe Co-Aligned as the Jidoka product (#1974)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-20T04:39:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4bd6a1f8305baeae1cec15e96b9bcd997287db86",
          "body": "* feat(gemba): own the runtime CLI axis under the new product (#2250)\n\nPart 1 of plan 2250-a. Create products/gemba (bin map + deps, no\nexports/main/src), move the six thin CLI entry points out of libharness,\nlibwiki, and libxmr under the gemba-* names, and purify the libraries\ninto import-only pack\n[…]\nobservable\nordering delta.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(gemba): the Gemba agent-runtime platform product (#2250) (#1973)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-20T04:38:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b48faeea40513e4ab7b969f5d217816d76033050",
          "body": "* plan(2250): the Gemba agent-runtime platform product\n\nPlan for spec 2250 against design-a: four parts — CLI axis (products/gemba\npackage, six bins, library purification, launchers, public-cli-set),\nactions axis (bootstrap/harness/benchmark/wiki relocation + publish\nwiring), product framing (Gear r\n[…]\nbution, rg -n consistency.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2250): the Gemba agent-runtime platform product (#1972)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T17:27:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "26b0e1c4c72aa862460a0935493935be41bc8859",
          "body": "* design(2250): an agent-runtime platform product\n\nCapture a new Secondary meta-product, PLATFORM (name deferred), whose job is\nto stand up and operate an agent team, split cleanly out of Gear along one\nboundary: PLATFORM ships what you run; Gear ships what you import.\n\nPLATFORM has two surfaces. An\n[…]\nee libraries.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016xYdChqvHtDr7BG2woh2Kj\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2250): an agent-runtime platform product (#1971)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T14:59:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cd9329696f41dcf62f8cff5e162b99f27670df4c",
          "body": "…es (#1969)\n\n* fix(librpc): bound unary calls with an absolute deadline across retries\n\nfit-process vectors hung effectively forever when the embedding service\nwas down: each UNAVAILABLE attempt fed exponential retry backoff\n(~17 minutes of sleep alone), and the vector processor swallowed batch\nfail\n[…]\nafter the assertions pass.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(librpc): bound unary calls with an absolute deadline across retri…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T12:55:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "40d8a6df09bdcef699cd2f6552d9912766d731ec",
          "body": "…(#1970)\n\nSubject-scoped commands (readiness, timeline, coverage, sources, and\nvoice with no flags) now resolve their subject through one explicit\nhelper: --email wins, else the signed-in identity's email, else an error\nthat names the sign-in path. evidence keeps its deliberately broad\nno-email view\n[…]\n_email is the persona's upward manager, while health --manager\ntakes a team lead's own email.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(landmark): default the subject email from the signed-in identity …",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T12:46:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e51ee4b4a956e9a75c103f66ba315af5f1b20615",
          "body": "…ess in bootstrap (#1968)\n\n* fix(libcodegen): prune stale generated service dirs and verify freshness in bootstrap\n\nA proto rename left the old generated/services dir behind: codegen only\nmkdirs and re-includes leftovers in exports.js, and bootstrap's warm\npath never compared the generated tree agai\n[…]\nsets before the prune test\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(libcodegen): prune stale generated service dirs and verify freshn…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T12:02:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "11a2067e0f2041cbc00a9bd9ac8a6b2794f2098d",
          "body": "…racy (#1967)\n\nlibrepl owns the input contract end to end: positional argv is now a\none-shot prompt line (one onLine call, then exit 0), equivalent to piped\nstdin; flags still win and positionals are never commands. The terminal\nformatter finally honors its TTY promise — pipes get plain text instead\n[…]\nxamples, and tool list caught up\nwith reality (pathway 3005, mcp 3011, CamelCase tool names).\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(guide): one-shot prompts, TTY-aware output, and status/skill accu…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T11:51:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "12ad090908809f88f20f9506c6e82a8c433e5cbc",
          "body": "…e (#1966)\n\nThe substrate stage shipped only the starter standard (J040/J060) while\nseeding rosters spanning J040-J100, so every staged workspace failed\nlevel-gated Landmark commands with 'Unknown level'. Stage now ships the\npathway standard from the same data root as the activity data (starter\nas f\n[…]\nhe stack survives, and FIT_DEBUG=1 prints full stacks from the\nfit-map and fit-landmark bins.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(map): stage the pathway standard and enforce roster level coverag…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T11:35:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "75df76f1085982171ae4be7bb086fc9a7b998d42",
          "body": "…embedding fixes, gear bundle)\n\nlibharness 1.4.0 -> 2.0.0: spec 2240 renamed the fit-benchmark\ninvariants subcommand to grade (no alias) and made the grade object\nrequired in result records -- breaking on the published CLI surface,\nso major despite the feat commit type. libwiki and gear carry the\n^2.0.0 range bump. gear 0.1.23 ships the post-2240 fit-trace and\nfit-benchmark binaries (--gate/--weight). map and svcembedding are\nroutine fixes.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): cut 5 packages (libharness 2.0.0 scored grading, map/…",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-19T10:48:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "527bea777d2918991a562b1b3470156300603137",
          "body": "…(#2240) (#1965)\n\n* feat(libharness): add pure check-row grading derivation\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* feat(libharness): discover and validate hidden test suites in the task loader\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* feat(libharness): add hidden\n[…]\nalse-passing their checks.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(libharness): scored benchmark tasks — row-authoritative grading …",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T10:31:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3d2532be53bc37c323f07205955d565791919cf0",
          "body": "The default reloadConfig handed createProductConfig a bare\n{ cwd, env } bag where the Config constructor expects a Runtime (or\n{ runtime } wrapper). Config then read rt.proc off the bag, got\nundefined, and libstorage crashed with \"Cannot read properties of\nundefined (reading 'env')\" — breaking `fit-\n[…]\nrap the ambient runtime and override only proc.cwd so the post-init\nre-read stays anchored at the stage target, as the original comment\nintends.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(map): pass a real runtime to reloadConfig in substrate stage",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-19T09:37:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0cef946b60b9e1691776c29714f6ef45cec85568",
          "body": "Without it, any input chunk over the model's max sequence length fails\nthe whole embedding batch with HTTP 413, so fit-process vectors drops\nthose documents from the index (73 of 192 batches on the current\nsynthetic corpus). Truncating over-length inputs is the right trade for\nan embeddings backend: a clipped embedding still lands in the index.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(embedding): pass --auto-truncate to the TEI backend",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-19T09:37:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e180e179bd58bcf8c21598d26e21037fa227e5d2",
          "body": "…s (#1963)\n\n* Revise spec 2240: de-tangle hidden tests from invariants\n\nHidden test suites become a first-class libharness subsystem driven by\na declarative tests/manifest.yaml: the harness stages each hidden test\ninto the agent CWD, runs it, converts the exit status into one check\nrow, and restores\n[…]\nwithout\nthem.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LMa8NiWcBJ21QfcPLJMsAg\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "spec(2240): scored benchmark tasks with harness-run hidden test suite…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T08:13:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ef8e305f9e0eac492f916382d4772a203d88807e",
          "body": "…e (#1964)\n\n* docs(skills): make the clean-break decision visible at every pipeline gate\n\nReviews anchor on artifacts, but the clean-break rule was written as a\ndefault that applies when the spec says nothing. An absent statement\ncannot be reviewed, so shims slipped through.\n\nEach phase now carries \n[…]\ntifact alone.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TFjs43ZN6DMu5pshVv6Rv1\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(skills): carry the clean-break decision through the spec pipelin…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T08:03:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c8274692d85d777050f223bcdc306c6ab7c806cc",
          "body": "…rading (#1962)\n\nThe dual-channel draft (weights beside an authoritative exit code) hinged\non a documentation-only coupling contract: a failing scored check must not\nfail the exit code, or every partial run zeroes out. Review concluded that\ncontract was the design's weakest point and a clean break i\n[…]\n and\nthe implement-feature leading example carry over from the previous draft.\n\n\nClaude-Session: https://claude.ai/code/session_01HyGEFbRLfPmDmQscL8sSYn\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(spec-2240): rework scored benchmark tasks to row-authoritative g…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-19T05:59:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fbf6bef36c689a6c75f946fc7e58d68299b65ce0",
          "body": "Implementation plan for the approved design: score derivation module,\nrecord-schema additions, runner and invariants-subcommand composition,\nreport meanScore/scoreAtK aggregation and rendering, fit-trace assert\n--weight, the implement-feature scored conversion, and documentation.\n\nPanel: 3 technical\n[…]\nt accepted\ntrade-off; overriding it is a design amendment, not a plan decision.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2240): scored benchmark tasks (#1961)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T18:37:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8b7f0fc405b93b17f67e987c8793b4d5e5210021",
          "body": "…, libharness advisor)\n\n- libcoaligned 0.1.17 -> 0.1.18\n- libcodegen 0.1.68 -> 0.1.69\n- libgraph 0.1.78 -> 0.1.79\n- libharness 1.3.0 -> 1.4.0\n- libmock 0.1.14 -> 0.1.15\n- libproto 0.1.3 -> 0.1.4\n- librc 0.1.39 -> 0.1.40\n- libresource 0.1.117 -> 0.1.118\n- librpc 0.1.110 -> 0.1.111\n- libtelemetry 0.1.\n[…]\n1.0 -> 3.12.0\n- svcspan 0.1.49 -> 0.1.50 (first release under svcspan prefix, was svctrace@v0.1.49)\n- librag 0.1.0 (first release)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): cut 18 packages (svcspan rename, librag consolidation…",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-18T17:41:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7c2133c26c16dee052882889caccccbebad18c2d",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: reflow markdown to satisfy format:md",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-18T17:37:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7a35ffa321c57a9cef65f2aa4a6dbd38288d9d8a",
          "body": "… alongside binary gates (#1960)\n\n* spec(2240): draft spec + design for scored benchmark tasks\n\nScored vs judged task shapes for fit-benchmark: mechanical score from\nweighted invariant check rows, judge kept as a binary gate, convention\nover configuration per task. Review panels pending; findings wi\n[…]\ntion section.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Bt3bNsA2WAXzTp2rKqyeUc\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2240): scored benchmark tasks — mechanical capability gradient…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T17:19:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "18032e7a395f153ef80661eb72edae994f7b92ff",
          "body": "…2230) (#1959)\n\n* feat(libharness): onPrompt tap on AgentRunner (#2230)\n\nStep 1 of plan 2230-a: optional onPrompt callback invoked with the\neffective (amend-applied) prompt of each run and resume, so a transcript\nrecorder can capture exactly what the caller received.\n\nCo-Authored-By: Claude Opus 4.8\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(libharness): native advisor consults for fit-harness sessions (#…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T12:35:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7326f0af0da2b08771228bbc0c2e3bae60170a74",
          "body": "* feat(archivist): add archivist agent and kata-archive skill (#2210)\n\nAdd the archivist persona (Study, Act) and its kata-archive skill, owning\ntime-based retention of terminal, time-bounded artifacts — past-week agent\nlogs and past-month storyboards removed directly in the wiki, terminal spec\ndire\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(kata): archivist + devex-engineer agents (#2210) (#1957)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T11:34:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "29492e3437e26703e77893c0917de35a701b0749",
          "body": "* feat(librag): consolidate six RAG bins into fit-process and fit-rag (#2220)\n\nNew librag library aggregates the retrieval-augmented-generation CLI surface\ninto two subcommand bins: fit-process (resources|graphs|vectors) and fit-rag\n(search|query|subjects). Each command module ports its predecessor \n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(librag): consolidate the RAG and codegen CLIs (#2220) (#1958)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T11:29:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ad20b7390e09d46131ffdcc057521a5efca0a6e4",
          "body": "Translate design 2230-a into an eight-step implementation plan for\nlibraries/libharness: runner onPrompt tap, transcript recorder, advisor\nsession + budget, Advisor tool + extra-tools seam, loop-mode and run-mode\nwiring, CLI flags, exports, and docs.\n\nPanel: 3-reviewer kata-review, 0 blockers; confi\n[…]\n missing from libmock' —\nit exists at libraries/libmock/src/fixture/eval.js:19.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2230): native advisor consults for fit-harness sessions (#1956)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T11:18:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "66a046bb4b6e29bf063b5c2fbf13f11110bf6d24",
          "body": "Execution-ready plan for the two roster agents, two Study-phase skills,\nand the retention-PR approval class. One implementation PR (enumeration-drift\ncouples the new skill dirs to the published-skills counts). Two clean\nkata-review panels.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2210): archivist + devex-engineer agents (#1954)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T10:49:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9be3ca92599331b49b340c80f1c5bb67e3043975",
          "body": "…g merge (#1955)\n\n* fix(skills): leave-it goes straight to discard_changes after verifying merge\n\nA plain ExitWorktree remove practically always refuses: squash merges\nleave the pre-squash commits on the branch, and the tool can also fail\nto verify worktree state entirely. Make the clean-tree + merg\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(skills): leave-it goes straight to discard_changes after verifyin…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T10:46:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "88b2b3c6fdd5c1419f35a7bf65fcaf122c412a2e",
          "body": "Spec (WHAT/WHY) and design (WHICH/WHERE) for an executor-triggered\nadvisor consult in libharness: one-shot judge-shaped session on a\nstronger model behind an Advisor MCP tool, per-participant transcript\nrecorder, code-enforced consult budget, and trace evidence. Lockstep\nco-execution: spec and desig\n[…]\newer batch and the 3-reviewer design re-panel are\naddressed in these revisions.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2230): native advisor consults for fit-harness sessions (#1953)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T10:33:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "71af12414a8173834df1a7b04053f4ed4378e9fc",
          "body": "Translate design 2220-a into an execution-ready plan: create librag with\nfit-process/fit-rag subcommand bins, fold fit-download-bundle into\nfit-codegen download, make the proto-compiler toolchain opt-in, and migrate\nevery call site, skill, and doc as one clean break.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2220): consolidate RAG and codegen CLIs (#1952)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T10:06:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce9d5fa9e2ad31315ac99d3edcaf5260d0009325",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(leave-it): skill to leave and remove a worktree",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-18T10:02:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad9df995083a783a041d1bf92628cd5e7cb5f2f0",
          "body": "Architectural design for spec 2210: two roster agents (archivist,\ndevex-engineer) and two Study-phase skills (kata-archive,\nkata-devex-audit), plus a new agent-originated retention-PR approval\nclass gated on a product-manager review. Reuses the established agent\nprofile, coverage-map audit, review-panel, and merge-gate shapes.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2210): archivist + devex-engineer agents (#1951)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T09:57:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "067b7c09d6a630c854e027e4843cfbe5abe2a486",
          "body": "* design(2220): consolidate RAG and codegen CLIs\n\nLockstep spec + design for consolidating the fragmented RAG CLI surface\nand the codegen distribution CLIs, from the CLI-consolidation research\nquorum finding.\n\n- New librag library with fit-process (write) and fit-rag (read)\n  subcommand CLIs replaci\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2220): consolidate RAG and codegen CLIs (#1950)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T09:38:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "438b9466e7492ef04621dc64340623db086a24b7",
          "body": "* spec(2210): archivist + devex-engineer agents\n\nAdd two Kata agents. Archivist owns time-based retention of terminal\nspecs and past-week logs/storyboards; DevEx Engineer owns codebase\nhealth and a new review-panel dimension. Each gets one new skill\n(kata-archive, kata-devex-audit). Retention PRs ar\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "spec(2210): archivist + devex-engineer agents (#1949)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T09:23:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9694a26d724c655a2773c8558e2900a244c25f88",
          "body": "…on merge (#1948)\n\nA sharded benchmark ran fit-benchmark report --format=text for every\nshard and for the merge, and text always rendered the full report\n(summary, pass@k, and per-task detail with per-run tables, invariant\nchecks, judge commentary, and errors). A 6-shard run produced six full\nsummar\n[…]\nmers using the action directly and\nunsharded keep the full summary by default.\n\n\nClaude-Session: https://claude.ai/code/session_01NtUUGSexm1pNA6qGcmBvDv\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(libharness): compact per-shard benchmark summaries, full report …",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-18T07:45:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64bd8009ef26cc15ae1c5bc57076a3490f2d220c",
          "body": "* feat(svcspan): rename svctrace service to svcspan\n\nComplete clean-break rename of the span-ingestion service from svctrace to\nsvcspan, removing the identifier collision with the unrelated fit-trace\nlibrary. Renames the directory, package (@forwardimpact/svcspan), bin\n(fit-svcspan), proto package/s\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(svcspan): rename svctrace to svcspan (#2200) (#1947)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-17T15:29:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7674fbc2bf97f71e9a748b2f5268790b7a1f9f14",
          "body": "Execution-ready plan-a.md for spec 2200 (svctrace → svcspan rename), plus a manual runtime smoke-test section and service start-up clarifications in services/ and config/ CLAUDE.md (config.json is gitignored, use just rc-* or source .env, fit-rc runs services under Node).",
          "is_bot": false,
          "headline": "plan(2200): rename svctrace to svcspan (#1944)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-16T12:18:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e05e4596f8f89c2341ebd3c606b5f9562d8f6e15",
          "body": "…ooks (#1945)\n\nQuiet, non-fatal session-start hooks; resolve tools through ordered install channels (release → brew/apt/npm) so web sessions fall back to trusted registries when github.com is blocked; add --soft for session hooks; add the coaligned launcher and extend the public-cli-set invariant for the one non-fit public CLI.",
          "is_bot": false,
          "headline": "feat(bootstrap): trusted install channels and quieter session-start h…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-16T07:34:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe53fac8de7b92747b8dd4a6811edf7faac9baf2",
          "body": "Cuts a fresh gear tag on top of 98015b17b so the tap job runs with the\nmerged render-formula.sh (creates Formula/fit-gear.rb from scratch). The\nv0.1.20 run published all 123 assets but its tap job failed because the\nold update-formula.sh only rewrote an existing formula and the tap ships\ncasks only. Carries the already-live libpack@0.1.11 (fit-pack stage --all).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(gear): bump to 0.1.21 to validate render-formula.sh tap fix",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-16T06:55:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "35c2bd07ecd8fab931c5ef0d7c0a9ea0c5ee7a28",
          "body": "Neutralize ambient DEBUG=* for the eslint (jsdoc) check so its wildcard can't dump internal logs and code-path graphs, make debug logging opt-in in the .env examples, and print a one-line pass confirmation from the metadata, dependabot, and jsdoc checks. `bun run check` output drops from ~2.3M lines to ~26, all signal.",
          "is_bot": false,
          "headline": "chore(check): cut check-chain noise and confirm each step (#1943)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T21:31:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3362832a10f9bf4991f5edc27f638d727a855650",
          "body": "…#1942)\n\nThe coaligned temporal invariant flagged a spec number in a code\ncomment. Reword the WHY to stand on its own without the reference.\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): drop rotting spec reference from render-formula.sh comment (…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T20:41:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "98015b17b681cc562a5cdd0721b636aca29821a0",
          "body": "The tap job failed on the first Homebrew-on-Linux release (gear@v0.1.20):\n`update-formula.sh` rewrites an existing formula in place, but the tap\nships casks only — there is no Formula/ dir, so `Formula/fit-gear.rb not\nfound` and the release's tap update never completed.\n\nSpec 2190 renders the cask b\n[…]\ne of any bundle now creates its formula, and a future bundle folds\nin with no hand-seeded tap file — matching the spec 2190 scope.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): render Linux formula from scratch in the tap job",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-15T19:13:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8b5028ad2194a630cba0d1271d44953e79934369",
          "body": "gear@v0.1.19 shipped no assets: its Publish: Binaries arm64 legs 404'd on\nthe apm download (pre-existing resolve_apm bug, now fixed in #1939 /\nbootstrap v1.0.15, pinned by #1940). Cutting gear@v0.1.20 at a main HEAD\nthat carries the full arm64 chain (env-cache-key + gear-skip + apm fix +\nv1.0.15 pins) to confirm arm64 Publish: Binaries now produces assets.\n\nRefs #1936\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(gear): bump to 0.1.20 (re-validate arm64 binaries) (#1941)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T17:15:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "85bd6dbca9a398106e310e881fb019ea920babb4",
          "body": "Bumps all 27 forwardimpact/bootstrap SHA pins from ccdf5ac7 (v1.0.14) to\n3d474156 (v1.0.15), which carries the apm arm64 asset-name fix (#1939,\nroot 21595d74d): resolve_apm now downloads apm-linux-arm64.tar.gz with the\ncorrect sha256 on ubuntu-24.04-arm, instead of 404ing on the wrong\n\"aarch64\" asse\n[…]\n.\n\nUnblocks the arm64 Publish: Binaries legs for the next gear cut.\n\nRefs #1936\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: bump bootstrap pin to 3d474156 # v1.0.15 (apm arm64 fix) (#1940)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T17:04:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "21595d74d5373ff61a366aa82afb09644ca65b9c",
          "body": "resolve_apm built the linux-aarch64 URL as apm-linux-aarch64.tar.gz\n(from uname -m), but Microsoft's apm release ships the arm64 asset as\napm-linux-arm64.tar.gz — so the download 404'd on every ubuntu-24.04-arm\nleg. The pinned sha256 for that case was also a placeholder dummy, never\nverified against\n[…]\naks, and claude all resolve correctly on arm64; only apm was wrong.\n\nRefs #1936\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): correct apm arm64 asset name and sha in fit-install.sh (#1939)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T16:58:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8978b003a6c695ae9f16bc4fed027589605f158a",
          "body": "Cuts a fresh gear release to validate the #1936 arm64 Linux binary-build\nfix now that bootstrap v1.0.14 is pinned on main (#1937). gear@v0.1.18 was\na dead tag — its Publish: Binaries produced no assets because of the arm64\nbug now fixed. This carries the already-live libpack@0.1.11 fit-pack (with\n`stage --all`).\n\nRefs #1936\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(gear): bump to 0.1.19 for arm64 binary-build validation (#1938)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T16:40:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d23a3b6d386170b67a4e51afac33a4b81b9bb339",
          "body": "Bumps all 27 forwardimpact/bootstrap SHA pins across 15 workflows from\n52b7f3fe (v1.0.10) to ccdf5ac7 (v1.0.14), which carries the arm64 Linux\nenv fix for the binary build (fix commit 471a0ad3d, #1936):\n\n- runner.arch added to the env-cache key (arm64 no longer restores the\n  x64 cache -> x64 `just`\n[…]\nl, package-macos.yml,\nreached via publish-binaries.yml) is covered.\n\nRefs #1936\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: bump bootstrap pin to ccdf5ac7 # v1.0.14 (arm64 fix) (#1937)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T16:29:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "471a0ad3d21c491c975ef98c13dbe7119e270788",
          "body": "Spec 2190 added a bun-linux-arm64 build leg on ubuntu-24.04-arm, but the\nfirst release run failed at `just codegen` with `Exec format error` — an\nx64 `just` on an aarch64 runner. Two bugs in the bootstrap action:\n\n1. The environment cache key used runner.os only. runner.os is \"Linux\"\n   for both ubu\n[…]\nso skip the gear-binary install on linux-aarch64 instead of\n   failing. The build needs only bun + just + the workspace, not gear.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): bootstrap arm64 Linux env for the binary build (#1936)",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-15T16:19:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dbb4817e180f082b9fabf9db802486b1fb642941",
          "body": "Ships the `fit-pack stage --all` whole-dir staging mode merged in #1934\n(4139a89e1). Producer step 1 of the gear-release chain: this bump lets the\nnext gear release (gear@v0.1.18) rebuild the fit-pack binary with --all, which\nCI installs via the bootstrap gear bundle.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(libpack): bump to 0.1.11 (#1935)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T15:43:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4139a89e1efaf7ae863682f669d124a11f94a0a0",
          "body": "* feat(libpack): add fit-pack stage --all whole-dir mode\n\nSelect every skill in the source dir regardless of prefix, for a\nsingle-pack source dir whose skills share no common prefix (e.g. a\nproduct-local .claude). --prefix is now optional; validation requires\n--prefix or --all.\n\nCo-Authored-By: Clau\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ci): publish Outpost skills pack (#1934)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T15:29:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2432887f01087496876af8669142a2def00bb2f0",
          "body": "* design(2200): rename svctrace to svcspan (spec + design)\n\nLockstep spec + design for renaming the span-ingestion service\n`@forwardimpact/svctrace` (bin `fit-svctrace`, at `services/trace/`) to\n`svcspan`. The name collides with the unrelated `fit-trace` library; the\nservice stores OpenTelemetry spa\n[…]\nkdown tables (MD056). Restructure the success-criteria table as a\nbulleted list so the pipes render literally, and run the repo md\nformatter.\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2200): rename svctrace to svcspan (#1933)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-15T07:19:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2f7e545c6ad2552c48196b44af760e19a0159946",
          "body": "The #read-do anchor does not exist in CONTRIBUTING.md; the Clean breaks\nitem lives under the ## Checklists heading. Point all seven links at\n#checklists, matching CLAUDE.md's convention. rumdl reflow follows.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(docs): repair broken CONTRIBUTING #read-do link fragments",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-14T18:53:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "435db00f0e1216609048c7a5b2052afc8b10a8be",
          "body": "* feat(build): add bun-linux-arm64 target routed to arm64 runner (#2190)\n\nAdd bun-linux-arm64 to every CLI's targets in the manifest and replace the\ntwo-branch os ternary in build-binaries.yml with a three-way map so the arm64\nLinux cell runs on ubuntu-24.04-arm instead of silently building on macOS\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(ci): Homebrew on Linux (#2190) (#1931)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-14T18:50:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "51be7cb23c6e86cbb71640ad42b7ac880d089792",
          "body": "* plan(2190): Homebrew on Linux\n\nTranslate design 2190-a into ten steps: add bun-linux-arm64 to the build\nmatrix behind a target→runner map, extract the macOS package job into a\nreusable package-macos.yml, add a parallel package-linux.yml that packs\nmanifest CLIs into per-arch tarballs via a new bui\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2190): Homebrew on Linux (#1930)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-14T16:47:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "44ddb058d2c90e3850c0570698e35af77114f382",
          "body": "…trine (#1928)\n\n* test: drop workflow-shape and invariant-module tests\n\nRemove the kata-interview workflow/action shape test, the kata-interview\nSKILL.md shape test, and the unit tests that duplicated invariant rule\nmodules already enforced by `bun run invariants` (public-cli-set,\nbun-test-imports, \n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: drop workflow-shape and invariant-module tests, add testing doc…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-14T16:14:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "86a17b551b8aa3b0aec6f7a53740938d50261df7",
          "body": "Add spec and design for distributing every tagged bundle on Linux via a\nHomebrew formula from the existing tap, mirroring the macOS per-bundle\ncontainer model. Lockstep spec+design in one PR.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2190): Homebrew on Linux (#1927)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-14T16:08:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "924676aee384ddf0e5441b28064cc5a6af5313c1",
          "body": "…y (#1926)\n\nRewrite fit-install.sh around a declarative tool registry. On Darwin, external\ntools install via Homebrew — homebrew-core formulae (just, gh, ripgrep,\ngitleaks) and the forwardimpact/homebrew-tap fit-gear cask (which ships every\nfit-* CLI and coaligned) — favouring official packaging ove\n[…]\nstep now always runs on macOS so brew tools are\nreconciled even on a cache hit.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bootstrap): install via Homebrew on Darwin, table-driven registr…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-14T14:52:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b384ed10914cb909cbb4ebe323ec9181a5b8fdec",
          "body": "…at v1.0.0\n\nReplace the local `./products/kata/actions/kata-interview` reference with the\npublished `forwardimpact/kata-interview@<sha> # v1.0.0`, matching every other\nsibling-action consumer and the SHA-pin policy in .github/CLAUDE.md. The\nmonorepo now dogfoods the actual split projection, and the \n[…]\ne\n(which had no preceding checkout to resolve against) is gone. Dependabot keeps\nthe pin current via the github-actions root scan.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(kata-interview): consume the published sibling action, SHA-pinned …",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-14T13:31:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cfa18dd360867c4db8bdfb28a75cb1069fedcfb8",
          "body": "Carries the bootstrap install-guard fix into a gear release so the published\nfit-install.sh asset (curl | bash bootstrap) installs a tool only when it is\nnot already on PATH. Pure rebuild bump — no products/gear source change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(gear): release 0.1.17 to ship the fit-install.sh PATH guard fix",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-14T09:16:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "577bf82f50bff3d5afaea40aa6f86e9fcec8bced",
          "body": "The install guard checked `$BIN_DIR/$name` — only whether a copy existed in\n$HOME/.local/bin — so a binary already resolvable on PATH (e.g. installed via\nHomebrew) did not count, and every bootstrap reinstalled it into ~/.local/bin,\nshadowing the existing one. Check `command -v \"$name\"` instead so an already\ninstalled tool anywhere on PATH is left in place.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(bootstrap): install a tool only when it is not already on PATH",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-14T09:14:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8ed5e06ba5ab02612bff6a6f661cce926fea255a",
          "body": "…s section (#1925)\n\nApply the coaligned-setup guideline to this repo's own CONTRIBUTING.md: the\nInvariants section listed the architectural non-negotiables in prose but never\npointed contributors at where the machine-checked rules live or how to add one.\nAdd a three-line pointer to `.coaligned/invar\n[…]\nules.mjs`, the\n`bun run invariants` command, and the coaligned-invariant skill.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(contributing): point at the invariant tooling from the Invariant…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-13T15:49:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0b88ecee81c970f0a04a1666f4c1f192d9eb6be7",
          "body": "…tup (#1924)\n\nThe coaligned-setup skill created the .coaligned/invariants/ layer and told\nauthors to record the check command in CONTRIBUTING.md, but never told them to\npoint contributors at where machine-checked invariants live or how to add one.\nThat discovery contract — the directory, the `coalig\n[…]\ne coaligned-skills benchmark with a\ncontributing-surfaces-invariants assertion.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(coaligned): point CONTRIBUTING.md at the invariant tooling in se…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-13T15:20:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "144441971347a1d93b459838be8d7aaf6c8e6e68",
          "body": "Carries #1923 into a gear release: publish-binaries now regenerates the\nfit-gear cask binary block from build/cli-manifest.json via\nrender-cask-binaries.sh, replacing the hand-fixed tap cask (tap #73) with a\nreproducible one. Pure rebuild bump — no products/gear source change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(gear): release 0.1.16 to regenerate homebrew cask from manifest",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-13T15:17:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "20084f6e99aa00638546e9aff6585233ffdfd751",
          "body": "…n (#1923)\n\n`brew install --cask fit-gear` failed at link time with \"symlink source\n'.../Contents/MacOS/fit-eval' is not there\": the libeval→libharness\nrename (spec 2110) renamed the fit-eval CLI to fit-harness and the app\nbundle followed, but the tap cask's hand-maintained `binary` block did\nnot. T\n[…]\nnd macOS awk. Product casks link\none binary and keep their hand-written stanza.\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(release): regenerate gear cask binary block from cli-manifest.jso…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-13T14:28:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a23fb039268bd9f578f3157523aec9a66e177230",
          "body": "Running a benchmark showed `apm install` writes a per-family `.gitignore`\n(just `apm_modules/`, already root-covered) that reappears every run as\nuntracked noise — the real source of the duplicate-.gitignore problem. Ignore\nthat generated file (and `*/bun.lock`) from the shared benchmarks/.gitignore\n[…]\nt-wiki's per-family copy so no family carries its own. Document the\napm-generated .gitignore in the fit-benchmark authoring guide.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(benchmarks): ignore apm-generated per-family .gitignore centrally",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-13T13:52:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c47b2c12fd0064c4913fecd3fcf6b05c510432a8",
          "body": "Add a fit-benchmark task family that proves the coaligned skill pack makes\nagents produce correct instruction artifacts, plus its manual-dispatch\nworkflow. Two tasks: `bootstrap-repo` (coaligned-setup — verifies CLAUDE.md\nsurfaces both job and checklist discovery, JTBD carries a <job>, the starter\ni\n[…]\ny format into authored vs generated\n  files, document judge.md, and add authoring guidance for agent.task.md and\n  what to commit.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(benchmarks): add coaligned-skills eval family",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-13T13:35:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dd6c7c9bf6c49816f239b7e6c7a7c46afd7ece57",
          "body": "Co-Aligned now defines the universal properties of CLAUDE.md, CONTRIBUTING.md,\nand JTBD.md — including the L1 requirement that CLAUDE.md surface how jobs and\nchecklists are discovered. The Monorepo standard now builds on Co-Aligned,\nkeeping only directory-shape conventions. This makes the coaligned-\n[…]\nigned-layer: point L1/L2 repairs at coaligned-setup\n- websites: reflect the flipped dependency on the coaligned and monorepo sites\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(coaligned): own universal root files and job/checklist discovery",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-13T11:46:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3803e4305d788669b9d4fe5e14a658ee3814c58b",
          "body": "…e (#1920)\n\n* fix(skills): repair broken markdown in kata-security-update and monorepo-setup\n\nRejoin the PR-body quote that a formatter split into a spurious H2,\nrestore the Memory section to H2, and give monorepo-setup's bare\nreference-style links real targets so they render as links.\n\nhttps://clau\n[…]\nest still asserted\nthe table row. Assert the contract phrases instead of the layout.\n\nhttps://claude.ai/code/session_01RiYqpptQcEYMBKeMwByhHr\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(skills): converge published skill packs on one house templat…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-09T07:36:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "61f63b84aff6c1f614bc885f3104ba53e54d2d3e",
          "body": "coaligned-setup Step 3 now seeds .coaligned/invariants/ with a bundled starter rule so a freshly bootstrapped repo begins with one live invariant. Adds no-conflict-markers.rules.mjs: a generic, zero-config rule that fails any tracked file carrying a leftover git merge-conflict marker.",
          "is_bot": false,
          "headline": "feat(coaligned-setup): ship a generic starter invariant (#1919)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-09T06:51:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ab9c73b7fbe8348cdae6d87b425f370fa014595",
          "body": "…(#1917)\n\nThe landing page framed Outpost as a flat list of 8 \"Core Skills.\" The\nproduct actually runs a team of six scheduled agent personas (postman,\nconcierge, librarian, chief-of-staff, recruiter, head-hunter), each\ncarrying a subset of ~28 shipped skills on its own cron schedule.\n\n- Reframe her\n[…]\nting Started\n- Rename the macOS heading to \"and\" so its in-page anchor resolves\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(outpost): reflect the agent-team model and full skill inventory …",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-09T06:47:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c6c4749c79bfbc7547982cabd959cc7b42c3785e",
          "body": "Part 04 of spec 2180. Switch the kata-interview wrapper's persona-select-command from the removed fit-map substrate verbs to fit-terrain substrate pick|issue, carrying the FI pick-memory path and issued-token name as explicit options. Add shape-test assertions pinning the terrain-only persona step (SC8).",
          "is_bot": false,
          "headline": "feat(kata): switch interview persona step to fit-terrain (#2180) (#1916)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-09T04:15:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a83d437a58b6f994b920b76a084a094e6d505e4",
          "body": "…1915)\n\nA bare fit-install.sh run now installs fit-wiki, fit-xmr, fit-trace,\nfit-doc, and fit-terrain alongside the external tools and coaligned.\nThese are the five fit-* CLIs the kata-* skills invoke, so every\nenvironment bootstrapped without arguments has them on PATH.\n\n\nClaude-Session: https://claude.ai/code/session_01KvJPJ61etEWexTen7dEd3N\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Install the five kata-used fit-* CLIs by default in fit-install.sh (#…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-08T23:48:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4e0efe7a518fe2f81146cdbaadaf3b787ffabdc9",
          "body": "libskill 6.2.0 (minor: standard contract), libharness 1.3.0 (minor:\ninterview action), libsyntheticprose 0.1.36, libterrain 0.1.41, map\n0.15.63, pathway 0.26.9, summit 0.1.31, landmark 0.1.31, gear 0.1.15\n(binary carrier). Floors: libskill ^6.2.0 in libterrain/map/pathway/\nsummit/landmark; libterrain ^0.1.41 in map/gear.\n\nhttps://claude.ai/code/session_01Pbkjsvf8AAvixdhkGxZbCp",
          "is_bot": false,
          "headline": "chore(release): cut spec-2180 train — libskill@v6.2.0 + 8 dependents",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-08T06:45:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3563349ca0a92e13c3d5a05238fa1b9560c6acc",
          "body": "…ill, identity verbs to fit-terrain (#2180) (#1912)\n\n* refactor(libskill): host the standard contract — levels module and JSON schemas move from map (#2180)\n\nPart 01 of plan 2180-a. Breaks the libskill<->map package cycle and the\ninverted libterrain->map edge:\n\n- levels.js + test and the thirteen sc\n[…]\nl, mechanical\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Pbkjsvf8AAvixdhkGxZbCp\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(terrain): generic substrate contract — standard schemas to libsk…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-08T05:18:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "02ba794ae4b56a5de06ae68cce3917ad1458e229",
          "body": "* plan(2180): draft plan-a — substrate contract, six parts\n\nDraft pending panel review; PR opens after the panel is clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01AcSX5W7CbNAAGxa1XprcSM\n\n* plan(2180): address panel findings — importmap\n[…]\ne Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01AcSX5W7CbNAAGxa1XprcSM\n\n* style: rumdl format plan-a files\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan(2180): generic substrate contract — six-part execution plan (#1911)",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-08T03:21:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d557abf15dc3c88c5d5cc39ebb16602b2829e41a",
          "body": "…ll, identity verbs to fit-terrain (#1910)\n\n* spec(2180): draft spec + design — generic substrate contract\n\nStandard contract (levels + JSON schemas) moves to libskill; substrate\nidentity verbs (provision/pick/issue + init/check) move to fit-terrain\nbehind a documented Substrate Contract. Clean brea\n[…]\ner-\nsupplied-name requirement is the WHAT and stays; exact flags live in the\ndesign.\n\nhttps://claude.ai/code/session_01U8CBqqkx5etFirMifY4mYd\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design(2180): generic substrate contract — standard schemas to libski…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-08T02:03:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "df2269dbb1fdb08e99ff979bd5d178bcd01b0dea",
          "body": "…action (#2170) (#1909)\n\n* feat(libterrain): add generic `fit-terrain substrate up` verb (#2170)\n\nSupabase bring-up primitive (start + discover + --emit-env) with its own\nthin, cwd-explicit spawner. No migration/seed knowledge — those stay with\nthe consumer — so the verb is portable to any Supabase-\n[…]\nrned error).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01LgBdXACCc85ZgcSdjVb75H\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(kata): package the interview capability as a reusable published …",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-08T00:22:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bbe6f90ad96deb92cb1d59ddb60d6eb71ec97d2c",
          "body": "…160) (#1908)\n\n* feat(bootstrap): add apm-verify pack reconciliation script\n\n`apm install` exits 0 even when a declared pack fails to resolve, so its exit\ncode cannot gate the run. Add a Bun `.mjs` that reconciles each pack declared\nunder `apm.yml` `dependencies.apm` against the post-install `apm.lo\n[…]\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: D. Olsson <dick.olsson@newpage.io>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(bootstrap): provision declared packs in the bootstrap action (#2…",
          "author_name": "Dick Olsson",
          "author_login": "dickolsson",
          "committed_at": "2026-07-07T20:19:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3391955d7604be9e11a4889f39668c023c4c2de4",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: remove .claude/memory symlink to wiki",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-06T07:35:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a79cdbb6fd4d742ff73168cfa6afd09b32dbbf23",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(ci): clarify website workflow names as \"Standard\"",
          "author_name": "D. Olsson",
          "author_login": null,
          "committed_at": "2026-07-06T07:33:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 100,
      "commits_last_year": 3471,
      "latest_release_at": "2026-07-21T20:08:13Z",
      "latest_release_tag": "gear@v0.3.2",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 28,
      "days_since_latest_release": 2,
      "mean_days_between_releases": 0.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "fit-rc",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/fit-rc",
          "is_deprecated": false,
          "latest_version": "0.1.40",
          "repository_url": "https://github.com/forwardimpact/monorepo",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 379,
          "first_published_at": "2026-06-12T13:47:28.600000Z",
          "latest_published_at": "2026-07-18T17:47:22.436000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "fit-doc",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/fit-doc",
          "is_deprecated": false,
          "latest_version": "0.2.37",
          "repository_url": "https://github.com/forwardimpact/monorepo",
          "versions_count": 2,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 256,
          "first_published_at": "2026-06-12T12:57:08.194000Z",
          "latest_published_at": "2026-07-01T14:17:25.059000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 22
        },
        {
          "name": "fit-rag",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/fit-rag",
          "is_deprecated": false,
          "latest_version": "0.1.0",
          "repository_url": "https://github.com/forwardimpact/monorepo",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 110,
          "first_published_at": "2026-07-18T17:47:44.183000Z",
          "latest_published_at": "2026-07-18T17:47:44.426000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "fit-guide",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/fit-guide",
          "is_deprecated": false,
          "latest_version": "0.1.53",
          "repository_url": "https://github.com/forwardimpact/monorepo",
          "versions_count": 5,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 284,
          "first_published_at": "2026-06-12T12:57:02.517000Z",
          "latest_published_at": "2026-07-18T18:11:26.503000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "fit-unary",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/fit-unary",
          "is_deprecated": false,
          "latest_version": "0.1.111",
          "repository_url": "https://github.com/forwardimpact/monorepo",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 383,
          "first_published_at": "2026-06-12T12:56:49.434000Z",
          "latest_published_at": "2026-07-18T18:00:19.291000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "fit-logger",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/fit-logger",
          "is_deprecated": false,
          "latest_version": "0.1.32",
          "repository_url": "https://github.com/forwardimpact/monorepo",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 169,
          "first_published_at": "2026-07-04T09:19:18.494000Z",
          "latest_published_at": "2026-07-04T09:19:18.850000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 19
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 3,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 35
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": true,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "design/justfile",
        "justfile",
        "websites/fit/justfile",
        "websites/jidoka/justfile",
        "websites/kata/justfile",
        "websites/monorepo/justfile"
      ],
      "api_schema_files": [
        "libraries/libproto/proto/common.proto",
        "libraries/libproto/proto/resource.proto",
        "libraries/libproto/proto/tool.proto",
        "services/bridge/proto/bridge.proto",
        "services/embedding/proto/embedding.proto",
        "services/ghserver/proto/ghserver.proto",
        "services/ghuser/proto/ghuser.proto",
        "services/graph/proto/graph.proto",
        "services/map/proto/map.proto",
        "services/pathway/proto/pathway.proto",
        "services/span/proto/span.proto",
        "services/tenancy/proto/tenancy.proto",
        "services/vector/proto/vector.proto"
      ],
      "has_devcontainer": true,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 61828,
      "source_files_sampled": 1641,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        ".claude/skills/CLAUDE.md",
        ".github/CLAUDE.md",
        "CLAUDE.md",
        "config/CLAUDE.md",
        "libraries/CLAUDE.md",
        "libraries/libbridge/CLAUDE.md",
        "libraries/libconfig/CLAUDE.md",
        "products/CLAUDE.md",
        "products/guide/CLAUDE.md",
        "products/map/CLAUDE.md",
        "products/outpost/CLAUDE.md",
        "products/outpost/templates/CLAUDE.md",
        "references/CLAUDE.md",
        "services/CLAUDE.md",
        "websites/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7904
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 116,
        "malicious_count": 0,
        "assessed_package": "npm:fit-rc@0.1.40",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "forwardimpact-monorepo",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "."
        },
        {
          "name": "@forwardimpact/libcodegen",
          "manifest": "launchers/fit-codegen/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/libdoc",
          "manifest": "launchers/fit-doc/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/guide",
          "manifest": "launchers/fit-guide/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/landmark",
          "manifest": "launchers/fit-landmark/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/libsupervise",
          "manifest": "launchers/fit-logger/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/map",
          "manifest": "launchers/fit-map/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/outpost",
          "manifest": "launchers/fit-outpost/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/libpack",
          "manifest": "launchers/fit-pack/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/pathway",
          "manifest": "launchers/fit-pathway/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/librag",
          "manifest": "launchers/fit-process/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/librag",
          "manifest": "launchers/fit-rag/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/librc",
          "manifest": "launchers/fit-rc/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/summit",
          "manifest": "launchers/fit-summit/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/libsupervise",
          "manifest": "launchers/fit-svscan/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/libterrain",
          "manifest": "launchers/fit-terrain/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/librpc",
          "manifest": "launchers/fit-unary/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/libtelemetry",
          "manifest": "launchers/fit-visualize/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/gemba",
          "manifest": "launchers/gemba-benchmark/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/gemba",
          "manifest": "launchers/gemba-harness/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        },
        {
          "name": "@forwardimpact/gemba",
          "manifest": "launchers/gemba-trace/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.0.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 6,
        "merged_prs": 1372,
        "open_issues": 29,
        "closed_ratio": 0.932,
        "closed_issues": 395,
        "closed_unmerged_prs": 148
      },
      "bus_factor": 1,
      "bot_contributors": 3,
      "top_contributors": [
        {
          "type": "User",
          "login": "dickolsson",
          "commits": 1813,
          "avatar_url": "https://avatars.githubusercontent.com/u/112085?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 388,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.824
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build-binaries.yml",
        "check-build.yml",
        "check-context.yml",
        "check-data.yml",
        "check-quality.yml",
        "check-security.yml",
        "check-test.yml",
        "curate-wiki.yml",
        "eval-guide.yml",
        "eval-jidoka.yml",
        "eval-kata.yml",
        "eval-wiki.yml",
        "kata-coaching.yml",
        "kata-dispatch.yml",
        "kata-interview.yml",
        "kata-shift.yml",
        "kata-storyboard.yml",
        "outpost-determinism-probe.yml",
        "package-linux.yml",
        "package-macos.yml",
        "publish-actions.yml",
        "publish-binaries.yml",
        "publish-npm.yml",
        "publish-skills.yml",
        "release-tag.yml",
        "website-fit.yaml",
        "website-jidoka.yaml",
        "website-kata.yaml",
        "website-monorepo.yaml",
        "website.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "biome.json",
        "eslint.config.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 3 contributing companies or organizations -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 8,
            "reason": "dependency not pinned by hash detected -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 4,
            "reason": "6 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a227f32d7bc49250fb2dab370cd88d581b36f558",
        "ran_at": "2026-07-24T03:36:58Z",
        "aggregate_score": 5.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T03:35:14Z",
      "oldest_open_prs": [
        {
          "number": 1883,
          "created_at": "2026-07-03T03:33:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1996,
          "created_at": "2026-07-24T00:52:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1997,
          "created_at": "2026-07-24T03:33:56Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1998,
          "created_at": "2026-07-24T03:34:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1999,
          "created_at": "2026-07-24T03:34:18Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2000,
          "created_at": "2026-07-24T03:36:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-23T23:16:16Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 357,
          "created_at": "2026-04-12T19:34:08Z",
          "last_comment_at": "2026-04-30T11:55:40Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 438,
          "created_at": "2026-04-19T14:54:53Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 479,
          "created_at": "2026-04-22T03:33:25Z",
          "last_comment_at": "2026-04-29T04:51:53Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 625,
          "created_at": "2026-04-30T12:25:51Z",
          "last_comment_at": "2026-05-19T13:16:24Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 953,
          "created_at": "2026-05-16T16:31:35Z",
          "last_comment_at": "2026-05-16T16:33:40Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 985,
          "created_at": "2026-05-17T19:19:42Z",
          "last_comment_at": "2026-05-17T19:30:45Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 986,
          "created_at": "2026-05-17T19:20:01Z",
          "last_comment_at": "2026-05-20T05:20:54Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 988,
          "created_at": "2026-05-17T19:20:36Z",
          "last_comment_at": "2026-05-17T19:22:47Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1036,
          "created_at": "2026-05-19T13:20:19Z",
          "last_comment_at": "2026-05-19T13:38:51Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1111,
          "created_at": "2026-05-22T02:37:11Z",
          "last_comment_at": "2026-05-22T03:41:39Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1386,
          "created_at": "2026-06-03T11:24:39Z",
          "last_comment_at": "2026-06-12T13:44:26Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1397,
          "created_at": "2026-06-03T15:25:03Z",
          "last_comment_at": "2026-06-06T05:08:02Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1503,
          "created_at": "2026-06-08T06:47:23Z",
          "last_comment_at": "2026-06-08T07:20:03Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1511,
          "created_at": "2026-06-08T08:19:17Z",
          "last_comment_at": "2026-06-08T20:28:31Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1517,
          "created_at": "2026-06-08T20:29:08Z",
          "last_comment_at": "2026-06-08T20:29:14Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1547,
          "created_at": "2026-06-10T15:14:33Z",
          "last_comment_at": "2026-06-10T15:41:12Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1548,
          "created_at": "2026-06-10T15:16:27Z",
          "last_comment_at": "2026-06-12T08:38:22Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1549,
          "created_at": "2026-06-10T15:16:49Z",
          "last_comment_at": "2026-06-10T22:57:51Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1550,
          "created_at": "2026-06-10T15:33:57Z",
          "last_comment_at": "2026-06-10T23:01:09Z",
          "last_comment_author": "kata-agent-team"
        },
        {
          "number": 1555,
          "created_at": "2026-06-10T16:17:49Z",
          "last_comment_at": "2026-06-10T17:10:29Z",
          "last_comment_author": "kata-agent-team"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/forwardimpact/monorepo",
    "host": "github.com",
    "name": "monorepo",
    "owner": "forwardimpact"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 65,
      "inputs": {
        "security": 62,
        "vitality": 86,
        "community": 40,
        "governance": 58,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "commits_last_year": 3471,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 28
            },
            "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": "28/52 weeks with commits",
                "points": 19.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 28
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "3471 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 3471
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "gear@v0.3.2",
              "releases_from_tags": false,
              "days_since_latest_release": 2,
              "mean_days_between_releases": 0.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 40,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 5,
            "inputs": {
              "forks": 0,
              "stars": 3,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "3 stars",
                "points": 4.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "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 (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 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
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 53,
            "inputs": {
              "packages": [
                "fit-rc",
                "fit-doc",
                "fit-rag",
                "fit-guide",
                "fit-unary",
                "fit-logger"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 1581
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "1,581 downloads/month across npm",
                "points": 42.7,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 1581,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 58,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.824
            },
            "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 82% of commits",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 82
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "merged_prs": 1372,
              "open_issues": 29,
              "closed_issues": 395,
              "issue_closed_ratio": 0.932,
              "closed_unmerged_prs": 148
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "93% of issues closed",
                "points": 43.6,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 93
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1372/1520 decided PRs merged",
                "points": 34.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1372,
                      "decided": 1520
                    }
                  }
                ],
                "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": 41,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "forwardimpact",
              "public_repos": 20,
              "account_age_days": 192
            },
            "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 forwardimpact",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "forwardimpact"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "20 public repos, account ~0 yr old",
                "points": 10.7,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 20
                    }
                  },
                  {
                    "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": [
                "fit-rc",
                "fit-doc",
                "fit-rag",
                "fit-guide",
                "fit-unary",
                "fit-logger"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "6 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 6,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "5 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "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": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "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": "30 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "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": "biome.json, eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json, eslint.config.js"
                    }
                  }
                ],
                "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": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "http://www.forwardimpact.team",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "http://www.forwardimpact.team",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 62,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 52,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.2
            },
            "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": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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 8",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "6 existing vulnerabilities detected",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:fit-rc@0.1.40 runtime dependency closure — what installing the published package pulls in — 116 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:fit-rc@0.1.40",
                  "assessed": 116
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 116,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 116,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 78,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_llms_txt": true,
              "legible_history_share": 1,
              "agent_instruction_files": [
                ".claude/skills/CLAUDE.md",
                ".github/CLAUDE.md",
                "CLAUDE.md",
                "config/CLAUDE.md",
                "libraries/CLAUDE.md",
                "libraries/libbridge/CLAUDE.md",
                "libraries/libconfig/CLAUDE.md",
                "products/CLAUDE.md",
                "products/guide/CLAUDE.md",
                "products/map/CLAUDE.md",
                "products/outpost/CLAUDE.md",
                "products/outpost/templates/CLAUDE.md",
                "references/CLAUDE.md",
                "services/CLAUDE.md",
                "websites/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7904
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".claude/skills/CLAUDE.md, .github/CLAUDE.md, CLAUDE.md, config/CLAUDE.md, libraries/CLAUDE.md, libraries/libbridge/CLAUDE.md, libraries/libconfig/CLAUDE.md, products/CLAUDE.md, products/guide/CLAUDE.md, products/map/CLAUDE.md, products/outpost/CLAUDE.md, products/outpost/templates/CLAUDE.md, references/CLAUDE.md, services/CLAUDE.md, websites/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".claude/skills/CLAUDE.md, .github/CLAUDE.md, CLAUDE.md, config/CLAUDE.md, libraries/CLAUDE.md, libraries/libbridge/CLAUDE.md, libraries/libconfig/CLAUDE.md, products/CLAUDE.md, products/guide/CLAUDE.md, products/map/CLAUDE.md, products/outpost/CLAUDE.md, products/outpost/templates/CLAUDE.md, references/CLAUDE.md, services/CLAUDE.md, websites/CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": "llms.txt present",
                "points": 15,
                "status": "met",
                "details": [
                  {
                    "code": "llms_txt_present",
                    "params": {}
                  }
                ],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "design/justfile",
                "justfile",
                "websites/fit/justfile",
                "websites/jidoka/justfile",
                "websites/kata/justfile",
                "websites/monorepo/justfile"
              ],
              "has_devcontainer": true,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.92,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "design/justfile, justfile, websites/fit/justfile, websites/jidoka/justfile, websites/kata/justfile, websites/monorepo/justfile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "design/justfile, justfile, websites/fit/justfile, websites/jidoka/justfile, websites/kata/justfile, websites/monorepo/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": "biome.json, eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json, eslint.config.js"
                    }
                  }
                ],
                "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": "devcontainer, Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "devcontainer, Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "92 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 92,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 8",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 61828,
              "source_files_sampled": 1641,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/1641 source files over 60KB",
                "points": 55,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1641,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": false,
              "api_schema_files": [
                "libraries/libproto/proto/common.proto",
                "libraries/libproto/proto/resource.proto",
                "libraries/libproto/proto/tool.proto",
                "services/bridge/proto/bridge.proto",
                "services/embedding/proto/embedding.proto",
                "services/ghserver/proto/ghserver.proto",
                "services/ghuser/proto/ghuser.proto",
                "services/graph/proto/graph.proto",
                "services/map/proto/map.proto",
                "services/pathway/proto/pathway.proto",
                "services/span/proto/span.proto",
                "services/tenancy/proto/tenancy.proto",
                "services/vector/proto/vector.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "libraries/libproto/proto/common.proto, libraries/libproto/proto/resource.proto, libraries/libproto/proto/tool.proto, services/bridge/proto/bridge.proto, services/embedding/proto/embedding.proto, services/ghserver/proto/ghserver.proto, services/ghuser/proto/ghuser.proto, services/graph/proto/graph.proto, services/map/proto/map.proto, services/pathway/proto/pathway.proto, services/span/proto/span.proto, services/tenancy/proto/tenancy.proto, services/vector/proto/vector.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "libraries/libproto/proto/common.proto, libraries/libproto/proto/resource.proto, libraries/libproto/proto/tool.proto, services/bridge/proto/bridge.proto, services/embedding/proto/embedding.proto, services/ghserver/proto/ghserver.proto, services/ghuser/proto/ghuser.proto, services/graph/proto/graph.proto, services/map/proto/map.proto, services/pathway/proto/pathway.proto, services/span/proto/span.proto, services/tenancy/proto/tenancy.proto, services/vector/proto/vector.proto"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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",
    "Could not fetch npm package 'fit-map' from its registry",
    "Could not fetch npm package 'fit-pack' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T03:37:18.390283Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/forwardimpact/monorepo.svg",
  "full_name": "forwardimpact/monorepo",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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