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

Wolfe-Jam / faf-cli

The context every AI coding agent reads — authors AGENTS.md, CLAUDE.md, GEMINI.md & .cursorrules from your repo's real stack. IANA-registered .faf format.

TypeScriptMIT★ 31 estrellas⑂ 4 forksdesde ago 2025Ver en GitHub ↗

Wolfe-Jam/faf-cli tiene un índice de salud de 70 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Vitality (92/100) y la más baja, Sustainability & Governance (53/100). Se actualizó por última vez hace 4 días. Una sola persona concentra la mayor parte del trabajo reciente.

70
global / 100
Bueno

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

70
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

Wolfe-JamesCuenta personal
19 seguidores97 repositorios públicosdesde nov 2024faf.one

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

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

92Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 4 días
29.8/36Cadencia de commits — 43/52 semanas con commits
18/18Volumen de commits — 947 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year947
human_commit_share0,94
days_since_last_push4
active_weeks_last_year43
Cómo se puntúa
27/27Publica versiones — 42 versiones publicadas
36/36Recencia de las versiones — última versión hace 4 días
27/27Cadencia de publicación — una versión cada ~3 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count42
latest_release_tagv7.2.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases3

Comunidad y Adopción

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

59Moderado · 18% del índice global
Cómo se puntúa
24/60Estrellas — 31 estrellas
4/25Forks — 4 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks4
stars31
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_template
Cómo se puntúa
51/80Descargas mensuales — 6713 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesfaf-cli, faf
dependents
ecosystemsnpm
total_downloads
monthly_downloads6713
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?

53Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
26.1/38.3Aceptación de PR — 62/91 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/29 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs62
open_issues0
closed_issues13
issue_closed_ratio1
closed_unmerged_prs29
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
9.4/25Alcance del propietario — 19 seguidores de Wolfe-Jam
16.3/25Trayectoria — 97 repos públicos, cuenta de ~1 años
Datos de entrada utilizados
followers19
owner_typeUser
is_verified
owner_loginWolfe-Jam
public_repos97
account_age_days608
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 2 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 4 días
20/20Historial de versiones — 151 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesfaf-cli, faf
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

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

86Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 4 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — eslint.config.mjs
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 2 out of 2 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

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://faf.one
10/10Descripción del repositorio
10/10Topics — 20 topics
0/10Wiki
Datos de entrada utilizados
topicsai, ai-context, cli, context-engineering, faf, typescript, mcp, yaml, claude, claude-code, agents-md, cursor, developer-tools, gemini, iana, npm, ai-agents, anthropic, code-generation, command-line-tool
has_wikino
homepagehttps://faf.one
has_readme
has_docs_dir
has_description

Seguridad

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

58Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 2 out of 2 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/29 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
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
0/7.5Vulnerabilities — sin datos
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,8
Excluidos de la puntuación (sin datos o no aplicable): packaging, vulnerabilities. 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_packages19
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:faf-cli@7.2.0 —lo que arrastra la instalación del paquete publicado—: 19 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.

76Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .cursorrules, .github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 93 de 94 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,989
agent_instruction_files.cursorrules, .github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md
agent_instruction_max_bytes3241
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.mjs
11/11Verificación estática de tipos — faf-engine/tsconfig.json, tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 83 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 6 de los últimos 100 commits son actualizaciones automáticas de dependencias
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsfaf-engine/tsconfig.json, tsconfig.json
agent_commit_share0,83
toolchain_manifests
dependency_bot_commit_share0,06
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
55/55Tamaños de archivo manejables — 0/222 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes43.922
source_files_sampled222
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — demos, examples
Datos de entrada utilizados
example_dirsdemos, examples
has_mcp_signalno
api_schema_files

Datos clave

31estrellas de GitHub
1contribuidores
947commits en los últimos 12 meses
4días desde el último push
42versiones publicadas
1factor bus
0issues 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 '@faf/engine' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

Historial de estrellas y forks 0 ★ / 4 ⇿
0Estrellas
4Forks
6Versiones

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

12233312026-022026-032026-03
Mayor 0Menor 3Parche 2
OpenSSF Scorecard 4.8 / 10
4.8agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests2 out of 2 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/29 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
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
n/dVulnerabilitiesinternal error: vulnerabilitiesClient.ListUnfixedVulnerabilities: osvscanner.DoScan: client error: status="400 Bad Request" body={"code":3,"message":"error in query at index 11: rpc error: code = InvalidArgument desc = invalid hash"}
Dependencias directas 7
RegistroPaqueteRestricción de versiónManifiesto
npmglob^11.0.3faf-engine/package.json
npmyaml^2.4.1faf-engine/package.json
npmcommander^14.0.1package.json
npmfaf-scoring-kernel^2.0.3package.json
npmopen^11.0.0package.json
npmyaml^2.4.1package.json
npmfaf-clilatestshim/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:faf-cli@7.2.0 arrastra 19 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": [
        "ai",
        "ai-context",
        "cli",
        "context-engineering",
        "faf",
        "typescript",
        "mcp",
        "yaml",
        "claude",
        "claude-code",
        "agents-md",
        "cursor",
        "developer-tools",
        "gemini",
        "iana",
        "npm",
        "ai-agents",
        "anthropic",
        "code-generation",
        "command-line-tool"
      ],
      "is_fork": false,
      "size_kb": 37892,
      "has_wiki": false,
      "homepage": "https://faf.one",
      "languages": {
        "HTML": 21320,
        "Ruby": 499,
        "Shell": 37187,
        "JavaScript": 61222,
        "TypeScript": 1052529
      },
      "pushed_at": "2026-07-22T16:02:42Z",
      "created_at": "2025-08-29T05:42:08Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T15:32:09Z",
      "description": "The context every AI coding agent reads — authors AGENTS.md, CLAUDE.md, GEMINI.md & .cursorrules from your repo's real stack. IANA-registered .faf format.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://faf.one",
      "name": "Wolfe-James",
      "type": "User",
      "login": "Wolfe-Jam",
      "company": "faf.one",
      "location": "ATL",
      "followers": 19,
      "avatar_url": "https://avatars.githubusercontent.com/u/189686721?v=4",
      "created_at": "2024-11-26T02:22:29Z",
      "is_verified": null,
      "public_repos": 97,
      "account_age_days": 608
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v7.2.0",
          "kind": "minor",
          "published_at": "2026-07-22T16:02:43Z"
        },
        {
          "tag": "v7.1.4",
          "kind": "patch",
          "published_at": "2026-07-20T21:10:19Z"
        },
        {
          "tag": "v7.1.3",
          "kind": "patch",
          "published_at": "2026-07-11T00:04:25Z"
        },
        {
          "tag": "v7.1.2",
          "kind": "patch",
          "published_at": "2026-07-10T05:24:23Z"
        },
        {
          "tag": "v7.1.1",
          "kind": "patch",
          "published_at": "2026-07-09T21:39:23Z"
        },
        {
          "tag": "v7.1.0",
          "kind": "minor",
          "published_at": "2026-07-07T12:57:24Z"
        },
        {
          "tag": "v7.0.2",
          "kind": "patch",
          "published_at": "2026-07-01T06:02:53Z"
        },
        {
          "tag": "v7.0.1",
          "kind": "patch",
          "published_at": "2026-07-01T03:46:00Z"
        },
        {
          "tag": "v7.0.0",
          "kind": "major",
          "published_at": "2026-06-28T14:58:26Z"
        },
        {
          "tag": "v6.16.0",
          "kind": "minor",
          "published_at": "2026-06-26T01:41:04Z"
        },
        {
          "tag": "v6.15.0",
          "kind": "minor",
          "published_at": "2026-06-24T20:49:12Z"
        },
        {
          "tag": "v6.14.0",
          "kind": "minor",
          "published_at": "2026-06-21T23:15:46Z"
        },
        {
          "tag": "v6.13.0",
          "kind": "minor",
          "published_at": "2026-06-17T05:51:05Z"
        },
        {
          "tag": "v6.12.0",
          "kind": "minor",
          "published_at": "2026-06-15T19:06:28Z"
        },
        {
          "tag": "v6.11.0",
          "kind": "minor",
          "published_at": "2026-06-14T03:36:16Z"
        },
        {
          "tag": "v6.10.1",
          "kind": "patch",
          "published_at": "2026-06-12T07:04:36Z"
        },
        {
          "tag": "v6.10.0",
          "kind": "minor",
          "published_at": "2026-06-12T05:34:33Z"
        },
        {
          "tag": "v6.9.0",
          "kind": "minor",
          "published_at": "2026-06-12T04:22:23Z"
        },
        {
          "tag": "v6.8.0",
          "kind": "minor",
          "published_at": "2026-05-31T00:01:38Z"
        },
        {
          "tag": "v6.7.1",
          "kind": "patch",
          "published_at": "2026-05-18T02:12:14Z"
        },
        {
          "tag": "v6.7.0",
          "kind": "minor",
          "published_at": "2026-05-17T21:34:48Z"
        },
        {
          "tag": "v6.6.1",
          "kind": "patch",
          "published_at": "2026-05-12T15:47:38Z"
        },
        {
          "tag": "v6.6.0",
          "kind": "minor",
          "published_at": "2026-05-11T22:07:48Z"
        },
        {
          "tag": "v6.5.1",
          "kind": "patch",
          "published_at": "2026-05-09T04:36:11Z"
        },
        {
          "tag": "v6.5.0",
          "kind": "minor",
          "published_at": "2026-05-09T03:57:23Z"
        },
        {
          "tag": "v6.4.0",
          "kind": "minor",
          "published_at": "2026-04-29T03:40:43Z"
        },
        {
          "tag": "v6.3.0",
          "kind": "minor",
          "published_at": "2026-04-27T21:54:52Z"
        },
        {
          "tag": "v6.0.10",
          "kind": "patch",
          "published_at": "2026-03-28T21:12:12Z"
        },
        {
          "tag": "v6.2.0",
          "kind": "minor",
          "published_at": "2026-04-14T13:46:47Z"
        },
        {
          "tag": "v6.1.0",
          "kind": "minor",
          "published_at": "2026-04-14T05:27:05Z"
        },
        {
          "tag": "v5.2.0",
          "kind": "minor",
          "published_at": "2026-03-20T19:34:45Z"
        },
        {
          "tag": "v5.1.0",
          "kind": "minor",
          "published_at": "2026-03-20T00:42:30Z"
        },
        {
          "tag": "v5.0.6-bun",
          "kind": "prerelease",
          "published_at": "2026-03-14T01:15:14Z"
        },
        {
          "tag": "v5.0.1",
          "kind": "patch",
          "published_at": "2026-03-02T05:49:29Z"
        },
        {
          "tag": "v4.3.0",
          "kind": "minor",
          "published_at": "2026-02-08T23:28:54Z"
        },
        {
          "tag": "v4.1.0",
          "kind": "minor",
          "published_at": "2026-02-01T00:07:07Z"
        },
        {
          "tag": "v3.4.8",
          "kind": "patch",
          "published_at": "2026-01-18T23:21:50Z"
        },
        {
          "tag": "v3.4.4",
          "kind": "patch",
          "published_at": "2026-01-07T14:42:41Z"
        },
        {
          "tag": "v3.4.3",
          "kind": "patch",
          "published_at": "2026-01-07T06:49:30Z"
        },
        {
          "tag": "v3.3.0",
          "kind": "minor",
          "published_at": "2025-12-28T20:16:53Z"
        },
        {
          "tag": "grok-demo",
          "kind": "other",
          "published_at": "2025-11-17T23:04:32Z"
        },
        {
          "tag": "v3.1.2",
          "kind": "patch",
          "published_at": "2025-11-08T00:45:42Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "8cef2bb02eed8308968448b8cf328f27be0d385d",
          "body": "Present tense: .faf still is the product; parallel pillars.",
          "is_bot": false,
          "headline": "docs(changelog): lock edition line — .faf is context, .fafm is memory",
          "author_name": "Wolfe-Jam",
          "author_login": null,
          "committed_at": "2026-07-22T15:29:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2efb50c4d46b0523ee748a03bf4d2a9da77be6c4",
          "body": "Maximize ship: ESLint-clean fafm surface; CHANGELOG/README/AGENTS/project.faf\n7.2.0; package keywords; .fafm in formats; TYRE CLI convert e2e; faf sync.",
          "is_bot": false,
          "headline": "release: 7.2.0 The Memory Edition — faf memory, docs, formats, TYRE",
          "author_name": "Wolfe-Jam",
          "author_login": null,
          "committed_at": "2026-07-22T15:06:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52e997d876a6d984ac062bc98a6257659e97cf2f",
          "body": "Item 6 (Path A): TypeScript .fafm library aligned to claude-fafm-sdk 1.0\nINTEROP (load/save fidelity, residual preserve, recall SoT, fromClaudeDir).\nCLI: faf memory convert|etch|ls|recall|show. Golden fixtures + ENGINE tests.",
          "is_bot": false,
          "headline": "feat(memory): faf memory TS surface — Soul + fromClaudeDir + CLI",
          "author_name": "Wolfe-Jam",
          "author_login": null,
          "committed_at": "2026-07-22T04:08:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b8260a4d8bd3af1dc246d6273bd05f6ab6decba",
          "body": "Documentation heuristic ran before cli and treated npm publish\nfiles:[\"dist\",\"README.md\"] as docs-only (bare \"dist\" failed the old\ndist/ regex). Real CLIs with package.json bin (e.g. agents-md-facts)\nwere misclassified as documentation on faf init --yolo.\n\n- Skip documentation signal when pkg.bin is set\n- Treat bare dist/src/lib/build/bin as source in files[]\n- Regression tests for agents-md-facts shape + true docs-only",
          "is_bot": false,
          "headline": "fix(detect): CLI packages with bare dist in files are not documentation",
          "author_name": "Wolfe-Jam",
          "author_login": null,
          "committed_at": "2026-07-21T23:04:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97b0fa8547f4dc5e8327cbcb4c6496b5ed8f1284",
          "body": "eslint --fix for 302 autofixable style issues (mostly curly braces),\nplus manual eqeqeq/no-useless-escape leftovers. Warnings (complexity,\nmax-lines, non-null assertions) unchanged — still soft. CI remains\ncontinue-on-error; local errors-only gate is clean.",
          "is_bot": false,
          "headline": "style(lint): zero ESLint errors (curly, eqeqeq, prefer-template)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-21T14:47:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8de09b7df41e4d0c1340e209a80687a2242c358c",
          "body": "Clear high advisories published 2026-07-20. Lockfile only.",
          "is_bot": false,
          "headline": "fix: npm audit fix (brace-expansion, js-yaml)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-21T05:22:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b99a6cf25afee5a0e19946f4545ddcb85193eba",
          "body": null,
          "is_bot": false,
          "headline": "chore: faf sync CLAUDE.md after Trophy for 7.1.4 ship",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-20T21:08:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afe6ac93b4b72940c3b69682e880dd47793e00d6",
          "body": "Align emitter with hand AGENTS exemplar: lint on verify bar, three-tier\nguardrails, When stuck, always Commit & PR, omit Human Context from agent\nops. project.faf commands/key_files; setup command order stable.",
          "is_bot": false,
          "headline": "feat(agents): BETTER-shaped faf export --agents (7.1.4)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-20T20:37:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d9c02cc49acb1d8d51dc0035153534efbb8aeff",
          "body": "BETTER AGENTS is hand-kept; CLAUDE/GEMINI from project.faf via faf.\nTest line uses extensive WJTTC + e2e (no rot-prone counts).",
          "is_bot": false,
          "headline": "docs(readme): honest AGENTS dogfood line + de-number tests",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-20T15:39:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aaf5dc680d3d14de9724a10ed1121ff3f05eb382",
          "body": "Rewrite agent briefing from live facts (7.1.3, real src map, three-tier\nguardrails). Align project.faf and CLAUDE.md so v6 means Bun milestone,\nnot current package version.",
          "is_bot": false,
          "headline": "docs: BETTER AGENTS.md — clear package semver + Bun-native since v6",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-20T15:39:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61b6c1ed975408d40a1e9778ef0a53f50f00ab6b",
          "body": "Bumps [@faf/specification](https://github.com/Wolfe-Jam/faf) from `16f50be` to `97c3f6f`.\n- [Commits](https://github.com/Wolfe-Jam/faf/compare/16f50bed52b939815e47895e7ed30e62385adbbd...97c3f6f9e51175d8f311ae09dbf9fc0a41f29f23)\n\n---\nupdated-dependencies:\n- dependency-name: \"@faf/specification\"\n  dep\n[…]\n1ae09dbf9fc0a41f29f23\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps: Bump @faf/specification from 16f50be to 97c3f6f (#106)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-17T19:21:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5c80284e88ffb3fa25d9a05ef210443083375d99",
          "body": "…e errors (#105)\n\ntsconfig pinned \"types\": [\"bun-types\"] but bun-types was never a declared dep,\nso `tsc --noEmit` threw TS2688 on every fresh typecheck. Bun's build skips tsc,\nso CI stayed green while the manual/IDE typecheck was permanently broken. Bun 1.3\nuses @types/bun; bun-types is deprecated.\n[…]\no keep the L7 bun.lock↔package-lock parity test green\n\ntsc --noEmit EXIT 0 · 1146/1146 tests · build output unchanged (type-only).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(types): migrate bun-types → @types/bun, unmask + fix 2 git.ts typ…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-13T01:53:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5b2aa2db30917a9b23ac1961d6fef286855b0706",
          "body": "…line)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): move faf.one/cli link hero → footer (keep the 3-pillar …",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-12T01:10:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f5f5559d38bd07ebecb1c10d9bbb9fd5cb333ac2",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): subtle gap between badges and the receipts line",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-12T01:08:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b6f6026ce49de875611236f732a4114529c2bd0d",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): shrink CONTEXT subtitle further (nested sub)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-12T00:45:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40d75e6e64bf84599a901ebb1f0e08ca355069b8",
          "body": "…tween)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): fold CONTEXT into title block (line falls below, not be…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-12T00:42:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c7e433f3c0a60ba3f9236b19bd78cdbe4bcba2b1",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): move 'CONTEXT, versioned.' below the title",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-12T00:37:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8acdf583edfd7d49a88534c1d8bda2e98bfe5dbd",
          "body": "Applies the full approved checklist (1 reorder · 2 editions→8-line summary ·\n3 Docs section · 4 hooks · 5 show · 6 table reformat · 7 dogfood note ·\n8 tight logo · 9 one-line star · 10 no free/pro). All 4 previously-dropped\nbrand items verified present: project.faf badge, Nelly heading, WJTTC/Testing,\nHTML-shows (kept in its v6.7 line). 479 → 281 lines.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): usage-first reshape — items 1-10, all brand preserved",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-12T00:27:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a1a67a50d40d00e596df4b4076b84fde02eb4c08",
          "body": "… editions\n\nUndoes the repo-restructure teardown. Full hero, project.faf badge,\nNelly heading, HTML-shows pillar, WJTTC line, all 13 editions — back.\nKeeps the docs.faf.one Custom-instructions bridge (the one good add).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Revert README to pre-restructure (fef3091) — restore full brand + all…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-12T00:05:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de7adc1535fa3ef5e260fd0f58afbd549a5f45dd",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): restore 👀 on the per-agent links",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T23:28:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c4cf3db55295753fe910478ae92d54c55763d700",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): trim star line (drop 'before adopting')",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T23:10:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "694daab0c9a012a07b663cf0546879488d93f812",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): drop (free)/(Pro) labels from sync diagram",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T22:36:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "46c797c3d762e245e23ae089bb750aa08cae2a50",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): tighten logo↔title gap (single h1)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T22:16:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "52f03583a5dfc16967fc0357843de9410fc87436",
          "body": "Was silently dropped in the restructure — it's a deliberate strategy,\nnot a restructure casualty. Kept to one line per request.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): restore the star ask (one line, under downloads)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T22:12:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d0a7705f49e12bcfb76e023a631c7c6ceb8de536",
          "body": "…door\n\nREADME: hero/brand kept; body de-cluttered. Usage on top (Install →\nQuick start → Commands); the 13 edition sections → a one-line \"Recent\neditions\" list + CHANGELOG; new \"Docs → docs.faf.one\" routing; hooks\nadded to Commands; a dogfood note (repo ships its own AGENTS.md/GEMINI.md).\n479 → 237 lines.\n\ndocs/: add docs/README.md index — the 12 flat files now have a front\ndoor that points at docs.faf.one as canonical.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: repo restructure (jneidel #2) — README trailhead + docs/ front …",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T21:05:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fef3091f6f4470ea7d2719111fea444deac23f58",
          "body": "…uthors\n\n- project.faf: add ai_instructions.working_style (conventions) beside warnings\n- ship AGENTS.md + GEMINI.md (un-ignored — faf-cli now ships what it authors)\n- add .github/copilot-instructions.md (was missing; v6.15 Edition, undogfooded)\n- refresh .cursorrules, sync CLAUDE.md (timestamp only, non-destructive)\n- .gitignore: resolve the AGENTS/GEMINI self-conflict; keep .fafb/project.html generated\n- score holds 🏆 100%\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(faf): full dogfood pass — faf-cli ships every context file it a…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T20:49:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "874f8c01cc2b66517cb77fd7ed6f4bfa26aae146",
          "body": "faf-cli now carries its own real rules (bun-not-npm, TS-strict, compose\nthe WASM kernel, authors-not-generates/never-guessed, no \"Guaranteed\",\npublish via /pubpro). Practices the feature docs.faf.one teaches.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(faf): adopt custom rules — dogfood ai_instructions.warnings",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T20:31:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f740770cafdad1c5d2437820390793230c023caf",
          "body": "Answers jneidel's \"can't find how to add custom instructions\" at the\nrepo level — a lean, findable pointer (not a baked-in section) from the\nREADME to the docs page. README points; docs.faf.one answers.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): bridge to docs.faf.one/custom-rules",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-11T20:18:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b065f985e81e3f3e42de2ca2d698309fdb5e141",
          "body": "Freshly-authored .faf files now stamp the current 3.0 format series\n(single source of truth, no stale 2.5.0). Plus a quiet, win-only star\nnudge and the rebuilt flagship README hero.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v7.1.3 — .faf version-stamp fix (#103) + star nudge",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-10T23:36:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2c7c19fde03ce3a6fedc85307b0b7805eb0807aa",
          "body": "# Conflicts:\n#\tREADME.md",
          "is_bot": false,
          "headline": "Merge flagship README rebuild",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-10T23:23:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e10886b87fb404ec7f36ea22e74ec323697164a1",
          "body": "Quiet, win-only star nudge (retires after 3 showings) + tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge star-nudge feature (stage2) into main",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-10T23:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "75deafda430ecd4d4939f1845a974a004fbfa486",
          "body": "… (#104)\n\nFAF authors context, it doesn't generate it. Move the remaining\nuser-facing \"generate\"-family CLI output to the \"author\" family:\nthe `faf export` format-flag help descriptions, the `faf context`\ncommand description, and the `faf conductor` usage line.\n\nKept: the `--generated` flag + the `g\n[…]\nterm\n`context-generated`. Status/success write-lines already used\ncreated/exported/authored (no \"Generated\" status line remained).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): FAF authors context — CLI status output Generated→Authored…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-10T22:14:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "90af387369741ef281446b9c558b3750588f5ffc",
          "body": "Four writers — detect, recover, conductor, and migrate — hard-coded\n`faf_version: '2.5.0'` as scattered literals and drifted stale while the\nformat series moved to 3.0. That scattered-literal drift is the exact\nanti-pattern FAF exists to kill, so the fix is FAF's own principle: one\nsource of truth.\n\n[…]\nrsion-independent (3.0 scores identically to 2.5.0), so this\nis a stamp fix with no scoring impact. Full suite: 1146 pass, 0 fail.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: single source of truth for faf_version (kill 2.5.0 drift) (#103)",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-10T22:01:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7823a0011eb6a83cf5a1e3dc9c6023a0cc98cb16",
          "body": "…-stdout fix (#100)\n\nCarries the tagged-but-unpublished 7.1.1 --stdout clean-.faf fix (#100) plus the interop emitter generated->authored banner change (#102). npm goes 7.1.0 -> 7.1.2.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v7.1.2 — authored emitter banners (#102) + ship the -…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-10T05:22:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4c8eb2173de034079f7961d7b26eec7021ee0ef6",
          "body": "…ed (#102)\n\nEvery emitted AGENTS.md/CLAUDE.md/GEMINI.md/.cursorrules/MEMORY.md/project.html now says 'Authored by faf', not generated. The copy doctrine, enforced at the source. Data field `generated` and function names untouched.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(interop): FAF authors context — emitter banners generated→author…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-10T04:06:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b0c50892b2e9cf9623f21c5991ca461f3e063a71",
          "body": "FAF authors context (reads repo → discerns → authors from intel); it\nnever \"generates\" it. Swept the generate word-family to the author\nfamily ONLY where it describes what FAF/the tool authors as output\n(AGENTS.md, CLAUDE.md, GEMINI.md, .cursorrules, scored context).\n\nLeft untouched: code identifier\n[…]\n LLM-slop framing,\ntest-receipt verbs (Generate TAF test receipt), fenced code commands,\nand historical CHANGELOG release entries.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: FAF authors context — generate→author copy sweep (#101)",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-10T03:18:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4fad883b7752a1419a12c1a36e218b35c27580ac",
          "body": "Patch on The AGENTS.md Edition. faf git <owner/repo> --stdout now emits a clean .faf: the 'cloning' progress line moved from stdout to stderr (#100).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v7.1.1 — ship the --stdout clean .faf fix (#100)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T21:24:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bb210405d5cd8cd05804be04c474ffd6c815d910",
          "body": "… (#99)\n\n* docs: rebuild flagship README hero — receipts-forward, star-optimized\n\nAbove-the-fold rebuild for the ~15-second star decision (research-backed):\n- one value prop (was 4 competing taglines)\n- badges 15 -> 5, led by the receipts (downloads . Anthropic #2759 . IANA)\n- plain-English receipts\n[…]\nioned.' leads (noun-first, first words they read)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: rebuild flagship README hero (receipts-forward, star-optimized)…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T21:12:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a982bfdeec1d960128e9719811dcae64d2356676",
          "body": "…clean .faf (#100)\n\nIn --stdout mode the .faf is piped to stdout, but the \"cloning...\" progress\nline also went to stdout (console.log) — contaminating the piped .faf's first\nline with an ANSI-dimmed string. Moved it to console.error (stderr), where\nprogress belongs. Adds a WJTTC TYRE test asserting \"cloning\" lands in stderr,\nnever stdout (the exact leak this fixes).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: send 'cloning' progress to stderr so `faf git --stdout` emits a …",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T21:12:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "60f6c4018746628a1086b409b390523d61c5c672",
          "body": "…rds they read)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: revert to A — 'CONTEXT, versioned.' leads (noun-first, first wo…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T20:47:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8aa027d554c93b160e16c400b2b9864d7d27d4a2",
          "body": "Trial arrangement B for visual comparison. Revert if A (statement-first) wins.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: [A/B trial] mirror hero — name → logo → 'CONTEXT, versioned.'",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T20:45:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "289c364924fd76460c53afaa646fb65d5b87ba14",
          "body": "The first two words they read — own the noun (CONTEXT), differentiator\nas understatement (versioned).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: lead the hero with 'CONTEXT, versioned.'",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T20:40:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "54969d4ae6f2c0001946965d982fe5f1d85587b6",
          "body": "Both rendered as 🏆 (live score is 100%), so the live-score badge was a\nvisual duplicate. Keep the single FAF 🏆 100%.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: one trophy badge only — drop redundant cyan live-score",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T20:34:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd391684fd0aac9650327bfff317fc15ffb76728",
          "body": "- ⭐ star-ask moved UP under the 115,000+ receipts line (was stranded before Install)\n- papers/funnel/testing consolidated to one line: DOI Context · DOI Memory · project.faf · TAF · CI\n- faf.one/cli tagline line\n- FAF Trophy 100% + live-score moved to the bottom of the hero\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: restructure hero badge layout",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T20:00:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6d6ca58731fc8ad666771cf04b610869ab299fc5",
          "body": "On faf-cli's own README the badge just links back to faf-cli and\ndisplays a small count — pointless. The star-ask sentence does the work.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: remove circular `?style=social` GitHub-stars badge",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T19:50:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "60ceb6842a336a35bf50adcda2d2167dc9d77736",
          "body": "…voir into the ask)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: star-ask reason -> 'despite all our downloads' (turns the reser…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T18:18:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e048d0c4a1d46cfe6c04d4945a1b732450038ae4",
          "body": "…y · footer)\n\nNothing dropped; ranked by importance:\n- Hero prime: Anthropic #2759 · IANA x2 · downloads · npm\n- Star line: GitHub stars (its own line)\n- Middle band: FAF (DOI x2 + project.faf->faf) · Testing (TAF + CI) · Trophy (100% + live-score)\n- Footer: License MIT · Homebrew\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nEOF",
          "is_bot": false,
          "headline": "docs: badge tiering — all 15 placed (prime · star · FAF/Testing/Troph…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T17:38:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c635ca37b28a67bbd2ea1d435ae75f8d93e921ac",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: break Git-Native line — mechanism, then the no-X/no-Y/no-Z payoff",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T17:28:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb4d6b87dc144b5c496684f3743f5dbb5515989f",
          "body": "…deterministic-from-truth)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: tagline 'not guessed' -> 'never guessed' (categorical, matches …",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T17:25:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c82e9951b11ceaf056a304177ad8f7a6d9601a2a",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: break value prop at the thought boundary (WHAT / then WHY)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T17:21:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb2356d0a99f2f69c34992536624a5fd08834bdb",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: break the star-ask onto two lines (ask bold, reason lighter)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T17:03:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "770fe7ad2d84f638e02cc792337c830fbaab0db0",
          "body": "Above-the-fold rebuild for the ~15-second star decision (research-backed):\n- one value prop (was 4 competing taglines)\n- badges 15 -> 5, led by the receipts (downloads . Anthropic #2759 . IANA)\n- plain-English receipts line (115k+ across the ecosystem, IANA, Anthropic-merged)\n- one friendly, value-f\n[…]\nhe \"Git for Context\" line + the package.json/project.faf/README file-tree\n\nBody (v7.1 edition + the v7.0->v6.7 history) unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: rebuild flagship README hero — receipts-forward, star-optimized",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-09T14:54:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0004264f2cfbc166956a69cf6b8ad706a88750b1",
          "body": "- Add docs/faf-cli-for-claude.md and docs/faf-cli-for-bun.md (per-audience on-ramps)\n- Shared lead line across all three guides\n- Trim the README integration section to a 3-guide index (depth lives in the guides)\n- Fix a stray code-fence in the faf-engine README\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: per-tool FAF-CLI guides + trim READMEs to lean pointers",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-08T14:36:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ba24a5b02e162f4da50fe6667e482827866bc10b",
          "body": "- Add docs/faf-cli-for-agents.md — the dev on-ramp (quick-start, per-tool patterns)\n- README + faf-engine README integration sections linking the guide\n- Docs only, no source changes\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: surface FAF-CLI for Grok, xAI & Cursor agent workflows",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-08T13:53:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1fe7505c7170384408ffc71681fec30b08082834",
          "body": "* feat: star-nudge — capture the reservoir (quiet, win-only, CI-safe)\n\nA one-line GitHub-star ask after a genuine win (score >= 95): interactive TTY\nonly, never in CI, throttled to once per 30 days per machine, opt out with\nFAF_NO_NUDGE. Converts existing usage into the star signal ~3 of 4 devs chec\n[…]\n the first commit wrote. +4 cap tests (14 total).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Stage 2 — star-nudge (capture the reservoir) (#98)",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-07T15:17:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a12cb36662c270cb8470499293743b425181ee90",
          "body": "Bumps [@faf/specification](https://github.com/Wolfe-Jam/faf) from `86174e4` to `16f50be`.\n- [Commits](https://github.com/Wolfe-Jam/faf/compare/86174e4005b1ae00d409b4db5e5dc83ad2164197...16f50bed52b939815e47895e7ed30e62385adbbd)\n\n---\nupdated-dependencies:\n- dependency-name: \"@faf/specification\"\n  dep\n[…]\n7895e7ed30e62385adbbd\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps: bump @faf/specification from `86174e4` to `16f50be` (#95)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-07T15:16:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a991f0712c48c507bbd099eb31b98c06f85a9bba",
          "body": "…rds (#97)\n\n- README: GitHub star affordance on the first-screen badge row (35k DLs, few stars = uncaptured reservoir)\n- README: fix Homebrew — brew install faf-cli 404s in core; use tap path wolfe-jam/faf/faf-cli (auto-taps)\n- package.json: keywords += agents-md, context-engineering, codex, windsurf\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: storefront polish — star CTA, Homebrew tap fix, AGENTS.md keywo…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-07T15:10:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "47db5a27f0ac2c0617b8fe7e5828140a83363111",
          "body": "A local CLI can't detect whether the user already starred (that needs the\nuser's own GitHub token), so instead of probing their account we cap the nudge:\nafter MAX_SHOWS (3) it retires for good. Starrer or not, nobody is nagged\nforever. State moves to small JSON {shown,last} with back-compat for the plain\nISO file the first commit wrote. +4 cap tests (14 total).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: star-nudge — add lifetime cap (retire after 3 showings)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-07T13:58:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad15ffdec07931f6e4e01c1c8c52072ef0a05bb5",
          "body": "A one-line GitHub-star ask after a genuine win (score >= 95): interactive TTY\nonly, never in CI, throttled to once per 30 days per machine, opt out with\nFAF_NO_NUDGE. Converts existing usage into the star signal ~3 of 4 devs check\nbefore adopting (Borges & Valente, JSS 2018, N=791).\n\n- src/ui/star-n\n[…]\nre once at the end of displayScore (covers score + auto)\n- tests: 10 gate cases (win threshold, TTY, CI, opt-out, throttle window)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: star-nudge — capture the reservoir (quiet, win-only, CI-safe)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-07T13:42:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1440e9d7585291def95e0301e903db8883bdaaaf",
          "body": "\"AGENTS.md, crafted, generated, optimized for you.\" leads; the GIT positioning\nbrilliance (\"FAF is to Context what Git is to Versions\" / \"Define once. Run\nanywhere.\") carries right behind it. wolfejam's exact wording.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): lead the header with AGENTS.md",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-07T12:27:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4ca0789b2738d90b9ba0f46a059b36446d6be537",
          "body": "faf export --agents now generates a complete, best-in-class AGENTS.md for any\nrepo — detected from your code, non-destructive, never stale. Version bump +\nCHANGELOG entry + README edition section.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v7.1.0 — The AGENTS.md Edition",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-07T04:46:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c5f480f5931d4048f2e2818c0139f3a99915af25",
          "body": "…etection (#96)\n\n* feat(agents): The AGENTS.md Edition exporter — facts-dense, curated\n\nRewrite generateAgentsMd to the definitive best-in-class spec: orientation\n(+ type/version), setup/build, tests, where-things-live, conventions, three-tier\nguardrails (project-specific facts first), definition-of\n[…]\n writeAgentsMd integration case. Suite 1131 pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: The AGENTS.md Edition — complete AGENTS.md for any repo, from d…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-07T04:36:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "329e93949aa47c634ef26c8c6253eac0d7bf5200",
          "body": "…s (#94)\n\nfaf export --agents emitted only the spine (orientation + stack + human-context).\nNow projects the actionable sections a good AGENTS.md needs — setup/build, tests,\nwhere-things-live, conventions, commit rules, guardrails — from slots the .faf\nalready carries (commands, key_files, ai_instru\n[…]\nop/agents.test.ts (8 tests): each section renders + its values,\nplus an anti-fabrication guard (absent slots omit their sections).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(export): render actionable AGENTS.md sections from existing slot…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-06T16:32:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f9a6716c76eecd7e0734033bb50104ed7b8f79c3",
          "body": "Bumps [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) from 3.95.5 to 3.95.7.\n- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)\n- [Commits](https://github.com/trufflesecurity/trufflehog/compare/d411fff7b8879a62509f3fa98c07f247ac089a51...f446421baf83\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "ci: bump trufflesecurity/trufflehog from 3.95.5 to 3.95.7 (#93)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-03T17:24:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "255593ab60a73adbe0b7e43fbdf064c9f80b9213",
          "body": "Bumps [Wolfe-Jam/faf-taf-git](https://github.com/wolfe-jam/faf-taf-git) from 2.2.0 to 2.2.2.\n- [Release notes](https://github.com/wolfe-jam/faf-taf-git/releases)\n- [Changelog](https://github.com/Wolfe-Jam/faf-taf-git/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/wolfe-jam/faf-taf-git/compar\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "ci: bump Wolfe-Jam/faf-taf-git from 2.2.0 to 2.2.2 (#92)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-03T17:24:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "50a8d665e07c8953fbdca1c73c654cbee9535dd8",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "ci: bump actions/checkout from 4 to 7 (#91)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-03T13:45:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e6dfde40c6fc85a8989ea5c736ce34320fecc016",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: faf sync (bi-sync stamp) for 7.0.2 release",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-01T05:45:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f0d046c7f304e2e3de0233850c81b03006be2b56",
          "body": "Version + CHANGELOG for the server-card flag-clash fix already merged (#89).\nPatch → inherits \"The GIT Version\" (no new edition).\n\n- package.json 7.0.1 → 7.0.2\n- CHANGELOG: meta-stamp latest=v7.0.2 + [7.0.2] entry\n\nPublish via /pubpro after merge (npm + faf dual-publish + Homebrew).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): prep faf-cli 7.0.2 — server-card --set-version fix (#90)",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-01T05:43:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5277161a8b43911d9c9f8869b1d6d757123e64d0",
          "body": "…h) (#89)\n\n`faf server-card --version <v>` collided with commander's program-level\n`.version(VERSION, '-v, --version')` (cli.ts:48), so commander's built-in won\nand PRINTED the CLI version instead of setting the card's version field.\n\nRenamed the server-card option --version -> --set-version (option\n[…]\nprints the CLI version; `server-card --help` shows\n--set-version. Typecheck clean (the TS2688 bun-types note is pre-existing env).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(server-card): rename --version to --set-version (global flag clas…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-01T04:51:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "19a4e2b80eb7455caee1d75ca7f16bd81901543b",
          "body": "…/slot fixes) (#88)\n\nPatch on The GIT Version. Cuts the release for work already merged to main:\nthe server-card emitter (#87), the slotignored->N/A rendering fix (#86), and\nthe Windows repoRel hardening.\n\n- version 7.0.0 -> 7.0.1\n- CHANGELOG: 7.0.1 entry\n- CLAUDE.md: bi-sync stamp\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: faf-cli 7.0.1 — central server-card title emitter (+ Windows…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-01T03:43:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "815643bc83279d80d63183202b00d35af32eff74",
          "body": "…ver-card` (#87)\n\nCompose-not-fork: faf-cli owns the registry server.json title logic once, so\nevery FAF MCP repo composes the same identity instead of hand-editing a title\ninto server.json — the drift that shipped \"Faf Claude Faf\" on github.com/mcp\nuntil claude-faf-mcp 5.20.0.\n\n- registryTitle(data\n[…]\nserver-card --check` reproduces claude-faf-mcp's live\nserver.json exactly — idempotent, the B1-test contract each repo will adopt.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server-card): central title emitter — registryTitle() + `faf ser…",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-07-01T03:12:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "580d82c7dbb4d933a25e4864c6b517ee743b9a8f",
          "body": "- Score-neutral surfaces: auto (from manifests) + declared (mcpaas, homebrew, targets)\n- Machine-checkable twin of human_context.where; read by /surface for declared-vs-live diff\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Add surfaces block to project.faf (distribution map)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-30T04:51:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "232b32c1c5d3da751bcdf6cde5f6d87fd14df31d",
          "body": "- faf score slot breakdown: slotignored slot shows '— path: N/A'\n\n- faf show HTML statline: 'N slotignored' -> 'N N/A'\n\n- display-only; the stored .faf value stays slotignored (canonical/scored)\n\n- full suite green (1087 pass)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: render slotignored as N/A on human-facing surfaces (#86)",
          "author_name": "Wolfe-James",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-29T18:36:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d016ad2be6ffdcab349b99de79821ae0ecc7f255",
          "body": "….yml Windows exclusion\n\nBuild/CI fix — NO npm republish (7.0.0 stays live; its npm CI badge (ci.yml) is green).\nThe failure was release.yml's Windows matrix, a post-tag workflow that doesn't feed\nthe badge. Two changes, both repo-only (not in the npm tarball except the src fix,\nwhich rides the NEXT\n[…]\nage-before-green-no-post-tag-gates + pubpro 1.1b).\n\nVersion stays 7.0.0; fixes ride the next (bigger) release. macOS suite 1087/0.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(windows): git-native repoRel (8.3-safe) + align release.yml to ci…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-28T18:59:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a8291889066dfba7af051502b7584f476b3e8367",
          "body": "Both marks mean Trophy 100%, shown by surface: ✪ (Proof Seal) on code surfaces\n(CLI, skills, docs, hub), 🏆 on social (posts, blogs, cards). Trophy row shows\nboth; a note explains the convention while ✪ rolls out. Per the surface-dependent\nTrophy doctrine.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(7.0): Scoring — explain the ✪ / 🏆 dual mark (both = 100%)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-28T00:04:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cf05a5bef9cc8a2da55516c030108ecf112168e6",
          "body": "Replaces the generic 'Persistent AI Context Standard' eyebrow with the distilled\nthesis. Hero now: The GIT Version · CONTEXT, VERSIONED. · FAF is to Context what\nGit is to Versions. · Define once. Run anywhere.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(7.0): hero eyebrow → 'Context, Versioned.' (wolfejam wording)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-27T23:56:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b9c6490867140e4aca6455971dd5007315347fcb",
          "body": "…with the GIT-Version tagline\n\nThe hero stacked two near-identical lines (pre-existing): 'Persistent AI Context\nStandard' (eyebrow) + 'Persistent Project Context for AI.' Replaced the second\nwith the 7.0 headline — 'FAF is to Context what Git is to Versions.' — so the\nthree lines are now distinct: what it is · the tagline · the promise.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(7.0): de-dupe README hero — replace repeated 'Persistent…' line …",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-27T23:52:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "55f14e6e97c5a88e76c130fa604135136ae903ee",
          "body": "… 100%)\n\nPre-publish FAF gate for 7.0: project.faf scores 🏆 Trophy 100% (9/9), when-field\nupdated to 'v7.0 The GIT Version, June 2026', CLAUDE.md bi-synced.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(7.0): FAF gate — sync CLAUDE.md + project.faf when→v7.0 (Trophy…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-27T16:18:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "10d7c1317dc7d42ec48a94efad95d63a95bf4868",
          "body": "The git-native quartet (faf diff · diff-driver · faf log · hooks) + deepened\nfaf git on-ramp + --help cohesion + 100% 5-tiered WJTTC + 7.0 completeness audit.\nFAF is to Context what Git is to Versions. 1087 tests / 0 fail.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "merge: faf-cli 7.0.0 — The GIT Version (feat/git-version)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-27T16:09:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8f6bee18d63577baea99cec9e43ca6169311c1c2",
          "body": "Ship-readiness docs for the major. Headline kept: 'FAF is to Context what Git\nis to Versions.'\n\n- CHANGELOG [7.0.0] 'The GIT Version' — additive feature list (diff · diff-driver\n  · log · hooks · faf git versioned · --help group), the one behaviour change\n  (faf git no-clobber) flagged, + the qualit\n[…]\n).\n\nBranch is a coherent, ship-ready 7.0.0. HELD for explicit GO: merge\nfeat/git-version → main + npm publish. 1087 pass / 0 fail.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(7.0): The GIT Version — README + CHANGELOG + bump 6.16.0 → 7.0.0",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-27T06:29:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d568d92fc5c0c6afb37eec15ad76fcbb1001651f",
          "body": "Historical X.0.1 lesson (faf-cli 5.0.3: 'lint added to gate — no more dirty\nbuilds'): make the NEW 7.0 code lint-clean. eslint --fix cleared 7 curly errors\nacross diff/log/hooks/git/faf; tidied one prefer-template artifact by hand.\nBehavior identical — 1087 pass / 0 fail. (The ~430 pre-existing lint\n[…]\nare non-gating debt, out of scope for 7.0; only complexity/length warnings remain\non the new files, which are cohesive by design.)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(7.0-audit): lint-clean the git-native files (5.0.3 lesson)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-27T04:46:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "be76b191defaeef95b28d3f9db0709ac97794a0b",
          "body": "…ld faf\n\n7.0 completeness-audit finding (predict & eliminate a 7.0.1): `diff --install-driver`\nand `hooks --install` wire git to call `faf diff-driver`/`faf hooks-run` — which a\n`faf` older than 7.0 lacks. Left unguarded, `git diff` would error, and worse, a\n--strict hook would BLOCK every commit (h\n[…]\ntalls but warns it no-ops until upgrade.\n- WJTTC +3: runnerWorks matrix + strict-refuse + warn-still-installs. 1087 pass / 0 fail.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(7.0-audit): version-ordering guard — driver/hooks refuse a too-o…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-27T04:38:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2cb51a3ec00794fca0b473941a4bff46f768ebbe",
          "body": "…, pass 2)\n\nMops up the 63 tests left untiered after pass 1 — partially-tiered files whose\nuntagged describe blocks held real tests (bench, bench-export, interview,\nturbo-cat-export/manifest, WJTTC-dart/-nextjs-edge/-svelte, loop, table-of-8).\n22 describe blocks prefixed with the right tier; command\n[…]\n20/20), zero logic touched. Full suite 1084 pass / 0 fail.\n\n#39 complete: faf-cli's WJTTC suite is 100% tiered (was 45% untiered).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(wjttc): retag the last partially-tiered files → 100% tiered (#39…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T23:15:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82966fdd6ff9bb4271b7b112d2981a7bc9e06775",
          "body": "`faf wjttc` classifies tests by a tier word (BRAKE/ENGINE/AERO/TYRE/PIT) in the\ntest name or a parent describe. 451 of 1005 tests (45%) were untiered. This pass\nprefixes describe blocks with the right tier per a fixed rubric:\n  ENGINE=core logic · BRAKE=guards/error-paths · AERO=edges/determinism ·\n\n[…]\n6 parallel passes + slots by hand, each batch self-verified green.\nPass 2 will mop up the ~63 remaining in partially-tiered files.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(wjttc): retag untiered tests to the 5-tier system (#39, pass 1)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T23:08:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "10a095e91af316d75f9cb2d28e83c41e3d5f9311",
          "body": "Surface cohesion: `faf --help` now groups the git-native commands (diff · log ·\nhooks · diff-driver · git) under a 'Git-native (The GIT Version)' section so the\n7.0 surface reads as one unit — 'FAF is to Context what Git is to Versions.'\n\nfaf git deepening (was one-shot + silently clobbered your pro\n[…]\nesion check. Network-free except\n  the clone itself.\n\n7.0 build: surface cohesion + the on-ramp now safe, versioned, and flexible.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(git): deepen the faf git on-ramp + 7.0 surface cohesion (#38)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T22:02:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b8ca0e00df5bd3ecc864faedbb34a8d14161814c",
          "body": "…injectable (kills test flake)\n\nfaf log hardening:\n- --follow so the timeline spans renames (the file's whole life, not just its\n  current name); fail-open to an empty history on any git error.\n- No SILENT truncation: a capped view prints '… showing N of M — faf log --all'.\n  JSON gains `total`. Non\n[…]\ng.\n\nFull suite 1075 pass / 0 fail; the 3 git suites verified green across 6\nback-to-back runs (was intermittently red under load).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "harden(log): --follow + fail-open + no-silent-cap; make git cmds cwd-…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T21:34:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "878bd0aae5b73048a6de4f372057d24fd33dce01",
          "body": "Edge-hardening pass on the git diff-driver — the path git invokes FOR the user:\n\n- Unmerged paths: git calls GIT_EXTERNAL_DIFF with a SINGLE arg (just the path)\n  during a merge conflict — we now print a clear '(unmerged)' note instead of\n  indexing undefined and rendering a bogus '(absent)' delta.\n\n[…]\ncy\n  (.gitattributes opts in exactly once), and a REAL merge-conflict where\n  `git diff` must not break with the driver installed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "harden(diff-driver): unmerged paths + fail-open + idempotency",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T20:52:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3e30feb43a598194b84788c094b8b72ae4adab92",
          "body": "…g all-added diff\n\nUser-edge follow-up on build #1: `faf diff <typo>` swallowed the bad ref and\nrendered a misleading 'everything added' diff. Now an EXPLICIT ref (single,\nA..B, A...B) is checked with rev-parse --verify and errors clearly on a typo;\nthe implicit default HEAD stays tolerant so `faf d\n[…]\n` still works in a repo\nwith no commits yet. A..B with no common ancestor also errors instead of\nthrowing raw. +1 subprocess test.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "harden(diff): validate explicit refs — a typo errors, not a misleadin…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T20:13:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "297d3c0ccdfb364f225b98560c0ac94f30fb646a",
          "body": "A commit-time guard that scores the STAGED project.faf against HEAD (reusing the\nfaf diff engine) and reports the score delta the commit makes:\n\n   ✓ faf: context 85% → 92% (+7)\n   ⚠ faf: context 92% → 85% (−7) — context regression  [--strict: blocks]\n\nDesigned user-first — the cardinal rule for a c\n[…]\nsting-hook all pass.\n\nBuild #4 of faf-cli 7.0 'The GIT Version'. The git-native quartet:\nfaf diff · diff-driver · faf log · hooks.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(hooks): faf hooks — pre-commit context guard (7.0 build #4)",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T20:10:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c38a4fc902dec001c278846a532f333a2c30160a",
          "body": "…build #3)\n\nWalks every commit that touched project.faf, scores each version through the\nkernel, renders the progression with per-commit deltas:\n\n   100%   +56  2026-03-22  57b42e1  🏆 TROPHY  feat: v6.0.0 publish-ready\n    44%   -37  2026-03-22  8ab92c4  ○ RED      feat: v6.0 architecture rewrite\n\nP\n[…]\nof faf-cli 7.0 'The GIT Version'. Completes the git-native trio:\nfaf diff (delta) · diff-driver (native git) · faf log (timeline).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(log): faf log — the .faf score timeline across git history (7.0 …",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T19:20:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2b91195a98426d0666f138262f8f13a1db06fc5a",
          "body": "… build #2)\n\nWires `faf diff` into git itself: `git diff`, `git log -p`, `git show` on a\n.faf render the semantic score + slot delta in place of the line diff.\n\n- `faf diff --install-driver` writes .gitattributes (*.faf diff=faf) + sets\n  `git config diff.faf.command \"faf diff-driver\"` (idempotent).\n[…]\nshort hex.\n- WJTTC: +3 tests incl. a real `git diff` spawn proving native integration.\n\nBuild #2 of faf-cli 7.0 'The GIT Version'.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(diff): git diff-driver — expose faf diff through native git (7.0…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T19:13:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5ff64bd85dd7099035e902b28902a2e5e6623d4a",
          "body": "….0 build #1)\n\n`git diff` shows line changes; `faf diff` shows what the change did to the\nproject's DNA — registry-labelled slot deltas (+/~/-, category-grouped) plus\nthe deterministic kernel score delta (e.g. 81% GREEN → 100% TROPHY, +19).\n\n- New `faf diff [range]` command. Git-range aware: HEAD→wo\n[…]\n).\n\nFirst build of faf-cli 7.0 'The GIT Version'. Pulled forward to bake while the\ncopilot-grade editions finish across the fleet.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(diff): faf diff — semantic context diff between .faf versions (7…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T17:25:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b23fc57a481d42faf88dc751c118602ef651f477",
          "body": "…NGELOG\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(6.16.0): align the Know Your Stack one-liner across README + CHA…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T01:30:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8ddc8b3e35b4c4ffe832c3c0cc92918d8685efeb",
          "body": "Registry-sourced labels across all 5 AI-context emitters + Copilot-grade\ncopilot-instructions.md rewrite. Every AI format labels your stack from one\ncanonical source.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge feat/know-your-stack-registry-labels — 6.16.0 Know Your Stack",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T01:19:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b2c0e2318461872214f6cb59cb30f56acc23ad16",
          "body": "… AI-context emitters\n\n6.16.0. Every AI-context file FAF emits now sources display labels from the\nslot registry (the single 'know your stack' source) instead of ad-hoc\nkey-munging — api_type→API, cicd→CI/CD, frontend→Framework, consistently\nacross CLAUDE.md, AGENTS.md, copilot-instructions.md, GEMI\n[…]\n Option B, GitHub-spec framing).\n- Fix: AGENTS.md no longer leaks 'slotignored' in human_context.\n- 1031 pass / 0 fail; clean tsc.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(interop): Know Your Stack — registry-sourced labels across all 5…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-26T01:19:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a07b9ccd7e0beb1a9172e9b318fc00ab1a31f7be",
          "body": "… Format)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(taf): retire stale 'Test Archive Format' gloss (TAF = Testing AI…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-25T15:53:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2d1888b174609fac7d9d2bccef33edba758f6c3a",
          "body": "… bare `faf taf`\n\nBlessed name resolution — `faf taf` is now the Receipt-Printer namespace\n(setup/stats/report); the score snapshot becomes the canonical\n`faf score --json`, enriched with self-describing metadata\n(faf_version/project/source) on top of the scorer result and kept\nDETERMINISTIC (no tim\n[…]\n` stays one release as a deprecated alias that prints a\nstderr nudge to `faf score --json`. score/taf/taf-setup/e2e green (38/38).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(taf): fold score snapshot into `faf score --json`; deprecate…",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-25T15:05:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c649340f153af996c8dfeadbcbdebcefb4ba66d6",
          "body": "…Printer\n\nThe TAF activation bridge: removes the hand-edit-YAML friction that was the\nfunnel's weak point. `faf taf setup` detects the runner (bun/pnpm/yarn/npm),\ngenerates a workflow wired to faf-taf-git (test | tee → receipt on the\ntaf-receipts branch), prints it by default, or --write creates\n.gi\n[…]\ncompat guard) pending the proposed fold into `faf score --json`.\n7 WJTTC-style tests; legacy taf + git suites still green (41/41).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(taf): faf taf setup — one-command CI activation for the Receipt …",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-25T14:46:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "565a311e03c17e9eb07030614c06e9d322b8c62a",
          "body": "GIT + Copilot are the adoption wedge this phase — this locks the emit so it\nnever regresses. 14 tests across the 5 WJTTC tiers (BRAKE/ENGINE/AERO/TYRE/PIT):\nthe non-destructive injection contract (never clobber a developer's hand-written\n.github/copilot-instructions.md), idempotency over N runs, fie\n[…]\nl, byte-determinism, and the author→edit→re-emit\nround-trip.\n\nRuns under faf-taf-git in CI → every green run prints a TAF receipt.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(wjttc): championship suite for the copilot-instructions emit",
          "author_name": "Wolfe-Jam",
          "author_login": "Wolfe-Jam",
          "committed_at": "2026-06-25T14:18:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "89413e2631887b406db32622bdb665e43e2fddef",
          "body": "Bumps [@faf/specification](https://github.com/Wolfe-Jam/faf) from `79cd04b` to `86174e4`.\n- [Commits](https://github.com/Wolfe-Jam/faf/compare/79cd04b8a13b1c18ab9215bf437fb5feecc72104...86174e4005b1ae00d409b4db5e5dc83ad2164197)\n\n---\nupdated-dependencies:\n- dependency-name: \"@faf/specification\"\n  dep\n[…]\n9b4db5e5dc83ad2164197\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "deps: Bump @faf/specification from `79cd04b` to `86174e4` (#85)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-25T01:22:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 42,
      "commits_last_year": 947,
      "latest_release_at": "2026-07-22T16:02:43Z",
      "latest_release_tag": "v7.2.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 43,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "faf-cli",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "faf",
            "ai-context",
            "project-dna",
            "bi-sync",
            "cli",
            "claude",
            "gemini",
            "cursor",
            "mcp",
            "model-context-protocol",
            "persistent-context",
            "ai-readiness",
            "foundational",
            "agents-md",
            "context-engineering",
            "codex",
            "windsurf",
            "fafm",
            "ai-memory",
            "agents"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/faf-cli",
          "is_deprecated": false,
          "latest_version": "7.2.0",
          "repository_url": "https://github.com/Wolfe-Jam/faf-cli",
          "versions_count": 151,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 4637,
          "first_published_at": "2025-09-24T15:22:09.412000Z",
          "latest_published_at": "2026-07-22T16:02:30.587000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        },
        {
          "name": "faf",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "faf",
            "ai-context",
            "project-dna",
            "bi-sync",
            "cli",
            "claude",
            "gemini",
            "cursor",
            "mcp",
            "model-context-protocol",
            "persistent-context",
            "ai-readiness",
            "foundational",
            "agents-md",
            "context-engineering",
            "codex",
            "windsurf"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/faf",
          "is_deprecated": false,
          "latest_version": "7.1.4",
          "repository_url": "https://github.com/Wolfe-Jam/faf-cli",
          "versions_count": 26,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2076,
          "first_published_at": "2026-01-12T04:58:26.384000Z",
          "latest_published_at": "2026-07-20T21:09:59.652000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 4,
      "stars": 31,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-02-08",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 1
          },
          {
            "date": "2026-03-31",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 4
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "demos",
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "faf-engine/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 43922,
      "source_files_sampled": 222,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        ".cursorrules",
        ".github/copilot-instructions.md",
        "AGENTS.md",
        "CLAUDE.md",
        "GEMINI.md"
      ],
      "agent_instruction_max_bytes": 3241
    },
    "dependencies": {
      "manifests": [
        "faf-engine/package.json",
        "package.json",
        "shim/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": 19,
        "malicious_count": 0,
        "assessed_package": "npm:faf-cli@7.2.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "glob",
          "manifest": "faf-engine/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.0.3"
        },
        {
          "name": "yaml",
          "manifest": "faf-engine/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.4.1"
        },
        {
          "name": "commander",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^14.0.1"
        },
        {
          "name": "faf-scoring-kernel",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.3"
        },
        {
          "name": "open",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.0.0"
        },
        {
          "name": "yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.4.1"
        },
        {
          "name": "faf-cli",
          "manifest": "shim/package.json",
          "ecosystem": "npm",
          "version_constraint": "latest"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 62,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 13,
        "closed_unmerged_prs": 29
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "Wolfe-Jam",
          "commits": 891,
          "avatar_url": "https://avatars.githubusercontent.com/u/189686721?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "claude.yml",
        "homebrew.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.mjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "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": "2 out of 2 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/29 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 8 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": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "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": null,
            "reason": "internal error: vulnerabilitiesClient.ListUnfixedVulnerabilities: osvscanner.DoScan: client error: status=\"400 Bad Request\" body={\"code\":3,\"message\":\"error in query at index 11: rpc error: code = InvalidArgument desc = invalid hash\"}",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "8cef2bb02eed8308968448b8cf328f27be0d385d",
        "ran_at": "2026-07-27T14:03:44Z",
        "aggregate_score": 4.8,
        "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-22T16:02:58Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-17T19:21:08Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Wolfe-Jam/faf-cli",
    "host": "github.com",
    "name": "faf-cli",
    "owner": "Wolfe-Jam"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 70,
      "inputs": {
        "security": 58,
        "vitality": 92,
        "community": 59,
        "governance": 53,
        "engineering": 86
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 92,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "commits_last_year": 947,
              "human_commit_share": 0.94,
              "days_since_last_push": 4,
              "active_weeks_last_year": 43
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "43/52 weeks with commits",
                "points": 29.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 43
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "947 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 947
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 8 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": 42,
              "latest_release_tag": "v7.2.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "42 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 42
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3
                    }
                  }
                ],
                "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": 4,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 4 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 59,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 28,
            "inputs": {
              "forks": 4,
              "stars": 31,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "31 stars",
                "points": 24,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 31
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "4 forks",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "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": 64,
            "inputs": {
              "packages": [
                "faf-cli",
                "faf"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 6713
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "6,713 downloads/month across npm",
                "points": 51,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 6713,
                      "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": 53,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "merged_prs": 62,
              "open_issues": 0,
              "closed_issues": 13,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 29
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "62/91 decided PRs merged",
                "points": 26.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 62,
                      "decided": 91
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/29 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 45,
            "inputs": {
              "followers": 19,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "Wolfe-Jam",
              "public_repos": 97,
              "account_age_days": 608
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "19 followers of Wolfe-Jam",
                "points": 9.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 19,
                      "login": "Wolfe-Jam"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "97 public repos, account ~1 yr old",
                "points": 16.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 97
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 1
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "faf-cli",
                "faf"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "2 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 2,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "151 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 151
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 86,
        "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": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "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": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "ai",
                "ai-context",
                "cli",
                "context-engineering",
                "faf",
                "typescript",
                "mcp",
                "yaml",
                "claude",
                "claude-code",
                "agents-md",
                "cursor",
                "developer-tools",
                "gemini",
                "iana",
                "npm",
                "ai-agents",
                "anthropic",
                "code-generation",
                "command-line-tool"
              ],
              "has_wiki": false,
              "homepage": "https://faf.one",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://faf.one",
                "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": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 58,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Vulnerabilities. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "vulnerabilities"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 48,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "2 out of 2 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/29 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 8 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 3",
                "points": 1.5,
                "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": "internal error: vulnerabilitiesClient.ListUnfixedVulnerabilities: osvscanner.DoScan: client error: status=\"400 Bad Request\" body={\"code\":3,\"message\":\"error in query at index 11: rpc error: code = InvalidArgument desc = invalid hash\"}",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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:faf-cli@7.2.0 runtime dependency closure — what installing the published package pulls in — 19 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:faf-cli@7.2.0",
                  "assessed": 19
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 19,
              "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": 19,
              "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": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 76,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.989,
              "agent_instruction_files": [
                ".cursorrules",
                ".github/copilot-instructions.md",
                "AGENTS.md",
                "CLAUDE.md",
                "GEMINI.md"
              ],
              "agent_instruction_max_bytes": 3241
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".cursorrules, .github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".cursorrules, .github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "93 of 94 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 93,
                      "sampled": 94
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "faf-engine/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.83,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.06
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "faf-engine/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "faf-engine/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "83 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 83,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "6 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 6,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 43922,
              "source_files_sampled": 222,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/222 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 222,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "demos",
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "demos, examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "demos, examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package '@faf/engine' 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-27T14:03:52.120707Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/Wolfe-Jam/faf-cli.svg",
  "full_name": "Wolfe-Jam/faf-cli",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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