faf 7.1.3 → 7.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,11 +3,11 @@
3
3
 
4
4
  <div align="center">
5
5
 
6
- **CONTEXT, versioned.**
7
-
8
- <img src="https://www.faf.one/orange-smiley.svg" alt="FAF" width="72" />
9
-
10
- # faf-cli
6
+ <h1>
7
+ <img src="https://www.faf.one/orange-smiley.svg" alt="FAF" width="72" /><br>
8
+ faf-cli<br>
9
+ <sub><sub>CONTEXT, versioned.</sub></sub>
10
+ </h1>
11
11
 
12
12
  ### The context every AI coding agent reads — authored from your repo, never guessed.
13
13
 
@@ -21,10 +21,11 @@ detected from your real stack, scored, and versioned with your code. No drift. N
21
21
  [![downloads](https://img.shields.io/npm/dt/faf-cli?color=008B8B&label=downloads)](https://www.npmjs.com/package/faf-cli)
22
22
  [![npm](https://img.shields.io/npm/v/faf-cli?color=00CCFF)](https://www.npmjs.com/package/faf-cli)
23
23
 
24
+ <br>
25
+
24
26
  **115,000+ downloads across the FAF ecosystem · IANA-registered · Anthropic-merged (#2759)**
25
27
 
26
- ⭐ **If faf-cli saves you setup time, a star helps other devs find it** —<br>
27
- despite all our downloads, ~3 of 4 developers check stars before adopting.
28
+ ⭐ **A star helps other devs find faf-cli** — despite the downloads, ~3 of 4 devs check stars.
28
29
 
29
30
  <!-- ② papers · funnel · testing — one line -->
30
31
  [![DOI: Context paper](https://img.shields.io/badge/DOI-Context%20paper-FF6B35)](https://doi.org/10.5281/zenodo.18251362)
@@ -33,7 +34,7 @@ despite all our downloads, ~3 of 4 developers check stars before adopting.
33
34
  [![TAF](./badge.svg)](https://github.com/Wolfe-Jam/faf-taf-git)
34
35
  [![CI](https://github.com/Wolfe-Jam/faf-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/Wolfe-Jam/faf-cli/actions/workflows/ci.yml)
35
36
 
36
- **[faf.one/cli](https://faf.one/cli)** · FAF defines. MD instructs. AI codes.
37
+ FAF defines. MD instructs. AI codes.
37
38
 
38
39
  <!-- trophy — bottom of hero -->
39
40
  [![FAF Trophy 100%](https://img.shields.io/badge/FAF-%F0%9F%8F%86%20100%25-000000?labelColor=FF6B35)](https://faf.one)
@@ -69,299 +70,131 @@ brew install wolfe-jam/faf/faf-cli && faf # Homebrew (auto-taps)
69
70
 
70
71
  ---
71
72
 
72
- ## Nelly Never Forgets
73
-
74
- Run `faf` with no arguments:
75
-
76
- ![faf](./nelly.png)
77
-
78
- ---
79
-
80
- ## v7.1 — The AGENTS.md Edition
81
-
82
- **`faf export --agents` now authors a complete, best-in-class AGENTS.md for any repo — detected from your code, non-destructive, never stale.**
83
-
84
- Point it at any repo and it detects your build/test commands, key files, conventions (ESLint/Prettier/strict/ruff/mypy…), and guardrails — then writes the definitive AGENTS.md: orientation, setup, tests, where-things-live, conventions, three-tier guardrails, a Definition of Done composed from your real commands, and secrets handling. Facts, not bloat. Your hand-written content is preserved.
85
-
86
- ```bash
87
- npx faf-cli export --agents
88
- ```
89
-
90
- ---
91
-
92
- ## Context for AI agents
93
-
94
- FAF-CLI authors the files agents read (AGENTS.md, CLAUDE.md, .cursorrules) from real project detection — zero-install via `bunx faf`.
95
-
96
- - [→ FAF-CLI for Grok, xAI & Cursor 👀](docs/faf-cli-for-agents.md)
97
- - [→ FAF-CLI for Claude Code 👀](docs/faf-cli-for-claude.md)
98
- - [→ FAF-CLI for Bun 👀](docs/faf-cli-for-bun.md)
99
-
100
- ## v7.0 — The GIT Version
101
-
102
- **FAF is to Context what Git is to Versions.**
103
-
104
- Git gave your *code* diff, log, blame, hooks, CI. v7.0 gives your *context* the same — `project.faf` is now a git-native artifact:
105
-
106
- - **`faf diff`** — semantic context diff + score delta between any two refs (`85% ● → 100% 🏆`)
107
- - **`git diff` speaks .faf** — `faf diff --install-driver` makes native `git diff` / `log -p` / `show` render the delta
108
- - **`faf log`** — the score timeline across history (Proof-Over-Time)
109
- - **`faf hooks --install`** — pre-commit guard: warn, or `--strict` block, on a context regression
110
- - **`faf git owner/repo --ref <tag>`** — instant, *versioned*, scored context from any repo
111
-
112
- Purely additive — a safe upgrade. (One change: `faf git` now refuses to overwrite an existing `project.faf` — pass `--force`.)
113
-
114
- ## v6.16 — Know Your Stack
115
-
116
- **FAF knows your stack — and now labels it identically in every file it writes: CLAUDE.md, AGENTS.md, copilot-instructions.md, GEMINI.md, .cursorrules.**
73
+ ## Quick Start
117
74
 
118
75
  ```bash
119
- faf export --all # CLAUDE.md · AGENTS.md · copilot-instructions.md · GEMINI.md · .cursorrules
120
- ```
121
-
122
- FAF *knows your stack* — all 33 canonical slots now carry their display label in the registry, so `api_type` → **API**, `cicd` → **CI/CD**, `frontend` → **Framework**, the same way in **every** emitted file. GEMINI.md and `.cursorrules` were raw-key dumps; now they read like the rest. And `.github/copilot-instructions.md` gets a ground-up **Copilot-grade** rewrite — a prose overview, a `## Build & run` command section, GitHub-spec framing. Copilot enhancements, and more.
123
-
124
- ---
125
-
126
- ## v6.15 — The Copilot Edition
127
-
128
- **FAF now writes the file GitHub Copilot reads.**
76
+ # ANY GitHub repo — no clone, no install, 2 seconds
77
+ bunx faf-cli git https://github.com/facebook/react
129
78
 
130
- ```bash
131
- faf export --copilot # → .github/copilot-instructions.md (every Copilot surface reads it)
132
- faf git owner/repo # instant scored .faf from any GitHub repo (now injection-hardened)
79
+ # Your own project
80
+ bunx faf-cli init # Create .faf
81
+ bunx faf-cli auto # Zero to 100% in one command
82
+ bunx faf-cli go # Interactive interview to gold code
133
83
  ```
134
84
 
135
- `faf export --copilot` emits GitHub Copilot's repository-wide instruction file — the **widest-surface** one, read by default across web chat, code review, VS Code, JetBrains, the CLI, and the coding agent. `faf git` is now hardened against URL command injection (no-shell `execFileSync` + a strict allowlist). Shipped with an exemplary WJTTC Git suite that adopts the full five tiers — **BRAKE · ENGINE · AERO · TYRE · PIT**.
136
-
137
85
  ---
138
86
 
139
- ## v6.14 — The Loop Edition
87
+ ## Nelly Never Forgets
140
88
 
141
- **`faf loop` drives any repo to 🏆 100% or the honest human wall** — sourcing every slot it can with provenance, asking only what only you know, never inventing.
89
+ Run `faf` with no arguments:
142
90
 
143
- ```bash
144
- faf loop # init → auto → score, then ask only the human-only gaps
145
- ```
91
+ ![faf](./nelly.png)
146
92
 
147
- The loop sources what detection can, then stops at one of three honest terminals: `done` (🏆 100%), `needs-human` (it asks only the slots only you can answer), or `stuck` (it sourced everything sourceable and nothing's left for a human to add). It never fabricates a slot to reach 100% — sourced 6Ws now carry provenance (`{value, source, confidence}`), so every seeded value is a confirm-or-edit suggestion, never an auto-confirmed guess.
93
+ > **faf-cli dogfoods itself** — [project.faf](./project.faf) is source DNA; [CLAUDE.md](./CLAUDE.md) and [GEMINI.md](./GEMINI.md) are authored from it via `faf`. [AGENTS.md](./AGENTS.md) is the **BETTER** ops briefing (hand-kept for agents; `faf export --agents` still authors AGENTS.md for other repos).
148
94
 
149
95
  ---
150
96
 
151
- ## v6.13 — The Dart Edition
97
+ ## Commands
152
98
 
153
- **faf now understands Dart and Flutter projects.** Content-aware `pubspec.yaml` classification — Flutter app vs reusable package · Dart server (Serverpod / Dart Frog / Shelf) / CLI / MCP — pure Dart stays Dart. The single-source engine faf-python-sdk and the MCPs compose, parity-tested across languages.
99
+ | Command | What it does |
100
+ |---------|--------------|
101
+ | `faf init` | Create `project.faf` from your local project |
102
+ | `faf git <url>` | Instant `.faf` from any GitHub repo — no clone |
103
+ | `faf auto` | Detect stack, fill every slot it can, score |
104
+ | `faf go` | Guided interview to fill the human-only slots |
105
+ | `faf score` | Check AI-readiness (0–100%) |
106
+ | `faf export` | Author `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `.cursorrules` |
107
+ | `faf sync` | Bi-directional `.faf` ↔ `CLAUDE.md` |
108
+ | `faf memory` | `.fafm` soul ops — convert Claude memory, etch, recall, ls, show |
109
+ | `faf diff` / `log` | Semantic context diff + score timeline across git history |
110
+ | `faf hooks --install` | Pre-commit guard against context regression |
111
+ | `faf compile` / `decompile` | `.faf` ↔ `.fafb` sealed binary |
112
+ | `faf check` | Validate a `.faf` file |
113
+ | `faf recover` | Rebuild `.faf` from an existing `CLAUDE.md` / `AGENTS.md` |
114
+ | `faf show` | Render `project.faf` to a browsable HTML page |
115
+ | `faf formats` | List supported stacks and formats |
116
+
117
+ Run `faf --help` for the full command set and options.
118
+
119
+ ### Memory (`.fafm`) — new in 7.2.0
120
+
121
+ Portable agent memory in the IANA-registered [`.fafm`](https://www.iana.org/assignments/media-types/application/vnd.fafm+yaml) format. Same INTEROP as [claude-fafm-sdk 1.0](https://pypi.org/project/claude-fafm-sdk/).
154
122
 
155
123
  ```bash
156
- faf auto # reads pubspec.yaml → Dart/Flutter into project.faf
157
- ```
158
-
159
- A pubspec alone no longer means "Flutter": `faf` reads the dependencies and classifies — a Flutter app, a reusable package, a Dart server, a CLI, or a Dart MCP server. The detection knowledge lives in one spec (`dart-detection.json`) that faf-cli, faf-python-sdk, and the MCPs all share.
124
+ # Claude Code memory dir → soul.fafm
125
+ faf memory convert ~/.claude/projects/.../memory -o soul.fafm
160
126
 
161
- ---
162
-
163
- ## v6.12 — The Single-Source Edition
164
-
165
- **faf-cli is now the single source for the registry `_meta`** — it emits the `one.faf/context` block every FAF MCP server composes: `registryMeta`/`registryName`/`fafContextBlock`, one deterministic projection, byte-identical, end-to-end across every surface, verifiable by sha, re-derivable instantly on-demand.
166
-
167
- ```ts
168
- import { registryMeta, registryName } from 'faf-cli';
169
-
170
- serverJson.name = registryName(faf); // → one.faf/<name>, derived from project.homepage
171
- serverJson._meta = registryMeta(faf); // nests one.faf/context under publisher-provided (4 KB cap)
127
+ faf memory ls # ranked facts
128
+ faf memory recall "your query" # deterministic filter + rank
129
+ faf memory etch "a durable fact" --id my-fact
130
+ faf memory show
172
131
  ```
173
132
 
174
- Honest-first: the block carries `{ faf, mediaType, iana, deterministic, generated }` — **no baked score**. One emitter, every door, byte-identical.
175
-
176
- ---
177
-
178
- ## v6.11 — The Ledger Edition
179
-
180
- **`faf bench --submit` posts your cold-vs-grounded receipt to the public ledger — the context bench goes public, one command.** Run the grounding benchmark, then submit the full pair receipt:
181
-
182
- ```bash
183
- faf bench --submit
184
- ```
185
-
186
- The benchmark stops being a private number and becomes a shared, verifiable receipt on the public ledger. Also new: `relentlessContext` / `assembleFreshFaf` and the `buildTableOf8` interview keystone join the public API.
187
-
188
- ## v6.10 — The Composed Edition
189
-
190
- **Every FAF MCP composes single-source engines, never reimplements them.** Turbo-Cat (the ~200-format knowledge base) and the bench engine join the public API, alongside scoring and the 6Ws Interview:
191
-
192
- ```ts
193
- import { turboCatScan, deriveQuestionSet, publicQuestions, gradeAnswers, buildReceipt } from 'faf-cli';
194
- ```
133
+ ### Dart/Flutter — knowledge v2 in 7.2.1
195
134
 
196
- - **Turbo-Cat composed** — `turboCatScan` / `turboCatSlots`: per-format breakdown + stack signature, sourced-only, deterministic, pure read. The MCPs retire their hardcoded format maps.
197
- - **Bench composed** — derive questions from any `.faf` (the answer key stays server-side via `publicQuestions`), grade mechanically, emit the `✪` receipt. One grading engine, byte-identical everywhere.
198
- - **`✪` = one convention** — parity · trust · bench all emit sha256-over-canonical-projection receipts any third party can re-derive.
135
+ Same content-aware detection as the [Dart Edition](https://faf.one/blog/claude-dart-edition) (Flutter ≠ every `pubspec`). **7.2.1** refreshes the single-source knowledge table: Riverpod annotation, Flutter Hooks, Beamer, Routemaster, Jaspr, Relic, and more MCP package names — still **one classifier**, composed by the MCPs.
199
136
 
200
137
  ---
201
138
 
202
- ## v6.9 — The Grounded Edition
139
+ ## Custom instructions
203
140
 
204
- **Grounding becomes a first-class primitive: `faf bench` proves it, the 6Ws Interview single-sources it, `faf refresh` keeps it.**
141
+ Your own rules for the AI — *"use full words in identifiers," "use bun, not npm"* — go in `project.faf` under `ai_instructions.warnings`. They land at the top of every `AGENTS.md` faf writes, verbatim and non-destructive.
205
142
 
206
- - **`faf bench`** — the AI-grounding benchmark. Cold vs with-faf, two numbers (answers right, tokens burned), and **the `.faf` is the answer key** — grading is mechanical, the receipt is a verifiable `✪` sha256. A low cold score is an alarm bell: you are hemorrhaging tokens and the AI is guessing at what you're building. `faf bench` → protocol, `faf bench questions` → hand them to any AI, `faf bench grade answers.json --cold|--faf` → the pair.
207
- - **The 6Ws Interview, exported** — the 8-question core (name + goal + the six Ws) plus the stack interview now ship as the public API (`SIX_WS_INTERVIEW`, `questionForSlot`, `interviewForMissing`). One registry; every consumer (CLI, MCPs, UIs) asks the same questions. Question drift is dead.
208
- - **`faf refresh`** — the re-ground: re-score the live `.faf`, measure drift vs the DNA baseline (`drift: 43% ↑ 55% (+12)`), keep an existing `.fafb` fast tier compiled current, record the journey. `drift → refresh → re-grounded`.
143
+ **→ [How to add custom rules](https://docs.faf.one/custom-rules)** · [docs.faf.one](https://docs.faf.one)
209
144
 
210
145
  ---
211
146
 
212
- ## v6.7 — The HTML Edition
213
-
214
- **We rendered a `.faf`. 🔥 The day we *saw* FAF.**
215
-
216
- A major development — not a new flag, a new way to *see* what your AI
217
- works from. A `.faf` was always machine-readable. Now it is
218
- human-visible.
219
-
220
- ```
221
- faf show
222
- ```
223
-
224
- **What:** one verb renders your *current* `project.faf` to a
225
- self-contained `project.html` and opens it — score, tier, the 6 W's,
226
- the stack, in any browser.
227
-
228
- **Why it matters:** HTML shows **on-demand** — current truth, never a
229
- stale snapshot — **visuals for human *and team* review.** The same
230
- context your AI reads, now reviewable by people. Trophy renders the
231
- earned award; sub-Trophy renders the honest gaps — a map, not a
232
- verdict. Humans like visuals. We gave them one.
233
-
234
- It is a **cross-check**: see what your AI sees, then improve what it is
235
- working with **at the root** — the `project.faf` itself, not the
236
- symptoms.
237
-
238
- This is the **4th pillar**:
239
-
240
- > **FAF defines. MD instructs. AI codes. HTML shows.**
241
-
242
- `faf show` · `faf export --html` · a public render API
243
- (`generateProjectHtml`) — one single-sourced renderer, no reinvention.
244
-
245
- Receipts → [CHANGELOG](./CHANGELOG.md)
246
-
247
- ---
248
-
249
- ## v6.6 — The Trophy Edition
250
-
251
- Until now we have had 85% as a recommended minimum. **It's now 100%! 🏆 All or nothing.**
252
-
253
- AI gets its best shot at assisting you. **Period.**
254
-
255
- We are able to do this because we can now get you to 100% on virtually any app-type.
256
-
257
- **FAF Init > Auto > Go = 100%.**
147
+ ## Scoring
258
148
 
259
- `faf sync` locks MD ↔ FAF with 100% 🏆 — anti-hallucination, pro-code.
149
+ **✪ Trophy 100% — all or nothing.** From v6.6.0 onward, faf-cli recommends only Trophy. 100% on the FCL is what makes the layers above (MD instructions, Agents, AI tooling) work — sub-Trophy leaves gaps that AI guesses on. Sub-Trophy tiers (including Bronze 85) remain on the ladder as honest interim states — they are not deleted; we just no longer *aim* for 85 as the goal.
260
150
 
261
- (Adding `about` — the 20th app-type — made the ladder hit a score. *How no-score became a score.* Fitting, because v6.6 is when that score became the only one we recommend.)
151
+ | Tier | Score | Status |
152
+ |------|-------|--------|
153
+ | ✪ **Trophy** | 100% | AI never has to guess — target |
154
+ | ★ **Gold** | 99%+ | 1 slot from Trophy |
155
+ | ◆ **Silver** | 95%+ | Close — keep going |
156
+ | ◇ **Bronze** | 85%+ | On the ladder (was the old recommend-min; not the target) |
157
+ | ● **Green** | 70%+ | Interim — keep going |
158
+ | ● **Yellow** | 55%+ | AI flipping coins |
159
+ | ○ **Red** | <55% | AI working blind |
160
+ | ♡ **White** | 0% | No context at all |
262
161
 
263
- Receipts → [CHANGELOG](./CHANGELOG.md)
162
+ **One score, three glyphs:** ✪ work (CLI · docs · receipts) · 🏆 social (X · blogs) · Trophy Mark PNG (brand). Source of truth: `src/core/tiers.ts`.
264
163
 
265
164
  ---
266
165
 
267
- ## v6.0 — Built with Bun
268
-
269
- v6 is a ground-up rewrite. All-in on Bun — same toolchain as Claude Code.
270
-
271
- | | Claude Code | faf-cli v6 |
272
- |-|-------------|------------|
273
- | **Runtime** | Bun | Bun (`bunx`) |
274
- | **Test** | Bun | `bun test` |
275
- | **Build** | Bun | `bun build` |
276
- | **Language** | TypeScript | TypeScript |
277
- | **Compile** | Bun bytecode | `bun build --compile` |
278
-
279
- 880 tests in ~18s. 296KB bundle in 2.4s. Single portable binary, 4 platforms. npx backward-compatible.
280
-
281
- 32 commands. 880 tests. WJTTC-tested. 93% smaller than v5.
166
+ ## Sync
282
167
 
283
168
  ```
284
- commands → interop → core → wasm
169
+ bi-sync: .faf ←── 8ms ──→ CLAUDE.md
170
+ tri-sync: .faf ←── 8ms ──→ CLAUDE.md ↔ MEMORY.md
285
171
  ```
286
172
 
287
- The WASM scoring kernel (`faf-scoring-kernel` 2.0.0) does the math. Bun does the delivery.
288
-
289
173
  ---
290
174
 
291
- ## Commands
175
+ ## Docs
292
176
 
293
- | # | Command | One-liner |
294
- |---|---------|-----------|
295
- | 1 | `faf init` | Create `.faf` from your local project |
296
- | 2 | `faf git <url>` | Instant `.faf` from any GitHub repo — no clone |
297
- | 3 | `faf auto` | Zero to 100% in one command |
298
- | 4 | `faf go` | Guided interview to gold code |
299
- | 5 | `faf score` | Check AI-readiness (0-100%) |
300
- | 6 | `faf sync` | `.faf` ↔ CLAUDE.md (bi-sync, mtime auto-direction) |
301
- | 7 | `faf compile` | `.faf` → `.fafb` binary — sealed, portable, deterministic |
302
- | 8 | `faf decompile` | `.fafb` → JSON |
303
- | 9 | `faf export` | Author AGENTS.md, .cursorrules, GEMINI.md |
304
- | 10 | `faf check` | Validate `.faf` file |
305
- | 11 | `faf edit` | Edit `.faf` fields inline |
306
- | 12 | `faf convert` | Convert `.faf` to JSON |
307
- | 13 | `faf drift` | Check context drift |
308
- | 14 | `faf context` | Author context output |
309
- | 15 | `faf recover` | Recover `.faf` from CLAUDE.md / AGENTS.md |
310
- | 16 | `faf migrate` | Migrate `.faf` to latest version |
311
- | 17 | `faf search` | Search slots and formats |
312
- | 18 | `faf share` | Share `.faf` via URL |
313
- | 19 | `faf taf` | Generate TAF test receipt |
314
- | 20 | `faf demo` | Demo walkthrough |
315
- | 21 | `faf ai` | AI-powered enhance & analyze |
316
- | 22 | `faf pro` | Pro features & licensing |
317
- | 23 | `faf conductor` | Conductor integration |
318
- | 24 | `faf formats` | Show supported formats |
319
- | 25 | `faf info` | Version and system info |
320
- | 26 | `faf clear` | Clear cached data |
321
-
322
- Run `faf --help` for full options.
177
+ The full manual lives at **[docs.faf.one](https://docs.faf.one)** — facts for devs, faf-cli first.
323
178
 
324
- ---
179
+ - [Getting started](https://docs.faf.one/getting-started) — install · run · use
180
+ - [Custom rules](https://docs.faf.one/custom-rules) — pin instructions your AI must follow
325
181
 
326
- ## Quick Start
327
-
328
- ```bash
329
- # ANY GitHub repo — no clone, no install, 2 seconds
330
- bunx faf-cli git https://github.com/facebook/react
331
-
332
- # Your own project
333
- bunx faf-cli init # Create .faf
334
- bunx faf-cli auto # Zero to 100% in one command
335
- bunx faf-cli go # Interactive interview to gold code
336
- ```
182
+ For a specific agent: [Grok, xAI & Cursor 👀](docs/faf-cli-for-agents.md) · [Claude Code 👀](docs/faf-cli-for-claude.md) · [Bun 👀](docs/faf-cli-for-bun.md)
337
183
 
338
184
  ---
339
185
 
340
- ## Scoring
186
+ ## Recent editions
341
187
 
342
- **🏆 Trophy 100% — all or nothing.** From v6.6.0 onward, faf-cli recommends only Trophy. 100% on the FCL is what makes the layers above (MD instructions, Agents, AI tooling) work — sub-Trophy leaves gaps that AI guesses on. Sub-Trophy tiers are honest interim states on the way to Trophy, not endpoints.
188
+ Pivotal releases — full history in [CHANGELOG.md](./CHANGELOG.md):
343
189
 
344
- | Tier | Score | Status |
345
- |------|-------|--------|
346
- | 🏆 / ✪ **Trophy** | 100% | AI never has to guess |
347
- | ★ **Gold** | 99%+ | 1 slot from Trophy |
348
- | ◆ **Silver** | 95%+ | Close — keep going |
349
- | ◇ **Bronze** | 85%+ | Interim — keep going |
350
- | ● **Green** | 70%+ | Interim — keep going |
351
- | ● **Yellow** | 55%+ | AI flipping coins |
352
- | ○ **Red** | <55% | AI working blind |
353
- | ♡ **White** | 0% | No context at all |
354
-
355
- **🏆 and ✪ both mean 100%** — the same top score, shown by surface: **✪** (the Proof Seal) on code surfaces — CLI, skills, docs, the hub — and **🏆** on social: posts, blogs, cards. You'll see both around for a while as the ✪ convention settles in.
356
-
357
- ---
358
-
359
- ## Sync
360
-
361
- ```
362
- bi-sync: .faf ←── 8ms ──→ CLAUDE.md (free forever)
363
- tri-sync: .faf ←── 8ms ──→ CLAUDE.md ↔ MEMORY.md (Pro)
364
- ```
190
+ - **v7.1 — AGENTS.md** — `faf export --agents` authors a complete, non-destructive `AGENTS.md`.
191
+ - **v7.0 — GIT** — context goes git-native: `faf diff` / `log` / `hooks`.
192
+ - **v6.16 — Know Your Stack** — every emitted file labels your stack identically.
193
+ - **v6.15 — Copilot** — `faf export --copilot` writes the file GitHub Copilot reads.
194
+ - **v6.14 — Loop** — `faf loop` drives any repo to ✪ 100% or the honest human wall.
195
+ - **v6.7 — HTML** — `faf show` renders a `.faf` to a browsable page. *(FAF defines. MD instructs. AI codes. HTML shows.)*
196
+ - **v6.6 — Trophy** — 100% or nothing.
197
+ - **v6.0 — Bun** — ground-up rewrite; single portable binary, four platforms.
365
198
 
366
199
  ---
367
200
 
@@ -382,9 +215,9 @@ Ship `faf` as a single binary for CI/CD, Docker, or air-gapped environments.
382
215
 
383
216
  ```
384
217
  src/
385
- ├── cli.ts ← Entry point, 26 command registrations
386
- ├── commands/ ← 26 command files (1 per command)
387
- ├── core/ ← Types, slots (33 Mk4), tiers, scorer, schema
218
+ ├── cli.ts ← Entry point (Commander registrations)
219
+ ├── commands/ ← one file per faf subcommand
220
+ ├── core/ ← Types, slots (Mk4), tiers, scorer, schema
388
221
  ├── detect/ ← Framework detection, stack scanner
389
222
  ├── interop/ ← YAML I/O, CLAUDE.md, AGENTS.md, GEMINI.md
390
223
  ├── ui/ ← Colors (#00D4D4), display
@@ -400,12 +233,12 @@ src/
400
233
  > **Robust. Reliable. Next-level WJTTC tested.** — The Foundation Edition.
401
234
 
402
235
  ```bash
403
- bun test # 880 tests, 75 files, ~18s
236
+ bun test # extensive WJTTC + e2e suite
404
237
  ```
405
238
 
406
- - **WJTTC Build Resilience** (13) — every regression class locked.
407
- - **WJTTC Kernel Stress** (19) — WASM kernel boundary tests.
408
- - **e2e lifecycle** — every command in sequence.
239
+ - **WJTTC Build Resilience** — regression classes locked.
240
+ - **WJTTC Kernel Stress** — WASM kernel boundary tests.
241
+ - **e2e lifecycle** — commands in sequence.
409
242
 
410
243
  Test reports in `reports/`.
411
244
 
@@ -416,13 +249,10 @@ Test reports in `reports/`.
416
249
  - **[GitHub Discussions](https://github.com/Wolfe-Jam/faf-cli/discussions)** — Questions, ideas, community
417
250
  - **Email:** team@faf.one
418
251
 
419
- ---
420
-
421
252
  If `faf-cli` has been useful, consider starring the repo — it helps others find it.
422
253
 
423
254
  ---
424
255
 
425
-
426
256
  ## Citation
427
257
 
428
258
  If you use `faf-cli` or the `.faf` / `.fafm` formats in research or production, please cite the format papers:
@@ -461,7 +291,7 @@ MIT — Free and open source
461
291
 
462
292
  **IANA-registered:** [`application/vnd.faf+yaml`](https://www.iana.org/assignments/media-types/application/vnd.faf+yaml) (Context Layer) · [`application/vnd.fafm+yaml`](https://www.iana.org/assignments/media-types/application/vnd.fafm+yaml) (Memory Layer)
463
293
 
464
- *format | driven 🏎️⚡️ [wolfejam.dev](https://wolfejam.dev)*
294
+ *format | driven 🏎️⚡️ [wolfejam.dev](https://wolfejam.dev) · [faf.one/cli](https://faf.one/cli)*
465
295
 
466
296
  <div align="center">
467
297