Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 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 Sterne⑂ 4 Forksseit Aug. 2025Auf GitHub ansehen ↗

Wolfe-Jam/faf-cli erreicht einen Gesundheitsindex von 70 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (92/100) ab, am schwächsten bei Sustainability & Governance (53/100). Zuletzt vor 4 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

70
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

70
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Wolfe-JamesPersönliches Konto
19 Follower97 öffentliche Reposseit Nov. 2024faf.one

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

92Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 4 Tagen
29.8/36Commit-Rhythmus — 43/52 Wochen mit Commits
18/18Commit-Volumen — 947 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year947
human_commit_share0,94
days_since_last_push4
active_weeks_last_year43
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 42 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 4 Tagen
27/27Release-Rhythmus — ein Release etwa alle 3 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count42
latest_release_tagv7.2.0
releases_from_tagsnein
days_since_latest_release4
mean_days_between_releases3

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

59Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
24/60Stars — 31 Stars
4/25Forks — 4 Forks
0/15Watcher — 1 Watcher
Verwendete Eingangsdaten
forks4
stars31
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templateja
Wie die Bewertung erfolgt
51/80Downloads pro Monat — 6.713 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesfaf-cli, faf
dependents
ecosystemsnpm
total_downloads
monthly_downloads6.713
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

53Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
26.1/38.3PR-Annahme — 62/91 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/29 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs62
open_issues0
closed_issues13
issue_closed_ratio1
closed_unmerged_prs29
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
9.4/25Reichweite des Inhabers — 19 Follower von Wolfe-Jam
16.3/25Kontohistorie — 97 öffentliche Repos, Kontoalter ca. 1 Jahre
Verwendete Eingangsdaten
followers19
owner_typeUser
is_verified
owner_loginWolfe-Jam
public_repos97
account_age_days608
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 2 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 4 Tagen
20/20Versionshistorie — 151 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesfaf-cli, faf
ecosystemsnpm
any_deprecatednein
min_days_since_publish4

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

86Exzellent · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 4 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — eslint.config.mjs
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 2 out of 2 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://faf.one
10/10Repository-Beschreibung
10/10Topics — 20 Topics
0/10Wiki
Verwendete Eingangsdaten
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_wikinein
homepagehttps://faf.one
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

58Mittel · 16 % des Gesamtindex

Sicherheitslage

48Gefährdet
Wie die Bewertung erfolgt
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.5Lizenz — 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 — keine Daten
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 — keine Daten
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, vulnerabilities. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages19
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:faf-cli@7.2.0 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 19 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

76Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — .cursorrules, .github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 93 von 94 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,989
agent_instruction_files.cursorrules, .github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md
agent_instruction_max_bytes3.241
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — eslint.config.mjs
11/11Statische Typprüfung — faf-engine/tsconfig.json, tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 83 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 6 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configsfaf-engine/tsconfig.json, tsconfig.json
agent_commit_share0,83
toolchain_manifests
dependency_bot_commit_share0,06
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/222 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes43.922
source_files_sampled222
oversized_source_files0
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — demos, examples
Verwendete Eingangsdaten
example_dirsdemos, examples
has_mcp_signalnein
api_schema_files

Eckdaten

31GitHub-Sterne
1Mitwirkende
947Commits, letzte 12 Monate
4Tage seit letztem Push
42Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • 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

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 4 ⇿
0Sterne
4Forks
6Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

12233312026-022026-032026-03
Major 0Minor 3Patch 2
OpenSSF Scorecard 4.8 / 10
4.8Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
k. A.Packagingpackaging 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
k. A.Vulnerabilitiesinternal 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"}
Direkte Abhängigkeiten 7
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Abhängigkeits-Advisories 0

Die Installation von npm:faf-cli@7.2.0 zieht 19 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.