faf-cli 7.16.1 → 8.0.0

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
@@ -110,7 +110,7 @@ Run `faf` with no arguments:
110
110
  | `faf memory` | `.fafm` soul ops — convert Claude memory, etch, recall, ls, show |
111
111
  | `faf diff` / `log` | Semantic context diff + score timeline across git history |
112
112
  | `faf hooks --install` | Pre-commit guard against context regression |
113
- | `faf compile` / `decompile` | `.faf` → `.fafb` sealed binary; `decompile` shows a `.fafb`'s sections as JSON |
113
+ | `faf compile` / `decompile` | `.faf` → `.fafb` **v2** sealed brick; `decompile` shows sections as JSON |
114
114
  | `faf check` | Validate a `.faf` file |
115
115
  | `faf recover` | Rebuild `.faf` from an existing `CLAUDE.md` / `AGENTS.md` |
116
116
  | `faf show` | Render `project.faf` to a browsable HTML page |
@@ -132,16 +132,28 @@ faf memory etch "a durable fact" --id my-fact
132
132
  faf memory show
133
133
  ```
134
134
 
135
- ### What's New in v7.16.0 — The Discoverable Edition
135
+ ### What's New in v8.0.0 — The Always33 Edition
136
136
 
137
- **A card nobody can find is not a card. The catalog `faf cards` writes now names who publishes it, keys every row the way the specs say to, and can be written as the ARD manifest agent search engines read.**
137
+ **One engine, one number: faf-cli v8 scores all 33 slots with the always-33 kernel — the same score faf-kernel, faf-rust-sdk and rust-faf-mcp give.**
138
138
 
139
- - **`faf cards --target ard`** writes `.well-known/ard.json`: the catalog rows carrying the search hints ARD reads from the `.fafa` — `metadata.cards.keywords` as `tags`, `metadata.cards.examples` as `representativeQueries`. A manifest with no `representativeQueries` is valid and unfindable, so `faf cards` says so and names the key to fill in.
140
- - **The catalog names its host**, so it reads as AI Catalog Level 2 "discoverable" rather than Level 1 "minimal". On a catalog you share, `host` is the one key faf adds, and only when the catalog names none.
141
- - **One primary key.** Catalog rows are keyed off the domain the `.fafa` declares and the handle — never the homepage host and the raw display name, which could put a space inside a URN and fail ARD conformance. A `.fafa` that names no domain is refused rather than published as `urn:air:local:…`.
139
+ - **The always-33 engine.** Every `.faf` is scored against all 33 Mk4 slots by one Rust kernel (`faf-scoring-kernel` 3.0.0, WASM). Verified identical to the reference always-33 scorer on the `project.faf` of all 80 FAF repos.
140
+ - **Your 21 slots, and the 12 enterprise slots in view.** faf-cli fills the 21 base slots. The 12 enterprise slots — infra, app, ops — are marked `slotignored` unless your app-type uses them, and `faf score` shows all 33.
141
+ - **Upgrading from 7.x:** a `.faf` without the 12 enterprise markers now scores against 33, so its number can drop (21 filled = 64%). **Run `faf auto`** — it writes the markers and your score returns.
142
+
143
+ ```text
144
+ ✪ TROPHY 100% 21/21 slots — project.faf
145
+ ● project.name
146
+ …
147
+ ● stack.cicd
148
+ — stack.monorepo_tool: slotignored
149
+ …
150
+ — monorepo.remote_cache: slotignored
151
+ ```
142
152
 
143
153
  **Recent sprint**
144
154
 
155
+ - ✪ [8.0.0](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v8.0.0) The Always33 Edition — one engine, one number
156
+ - 🧱 [7.16.2](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v7.16.2) `faf compile` emits FAFb wire v2 — same bytes as the faf-fafb golden
145
157
  - 🧭 [7.16.1](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v7.16.1) `faf` back in step with `faf-cli`
146
158
  - 🧭 [7.16.0](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v7.16.0) The Discoverable Edition
147
159
  - 🎴 [7.15.0](https://github.com/Wolfe-Jam/faf-cli/releases/tag/v7.15.0) The Pack Edition
@@ -182,6 +194,8 @@ Your own rules for the AI — *"use full words in identifiers," "use bun, not np
182
194
  | ○ **Red** | <55% | AI working blind |
183
195
  | ♡ **White** | 0% | No context at all |
184
196
 
197
+ **Always-33.** The score is filled ÷ active across all 33 Mk4 slots. Your app-type decides which slots are active; the rest are `slotignored` and stay visible. Same file, same engine, same number — see [docs/SCORING.md](./docs/SCORING.md).
198
+
185
199
  **One score, three glyphs:** ✪ work (CLI · docs · receipts) · 🏆 social (X · blogs) · Trophy Mark PNG (brand). Source of truth: `src/core/tiers.ts`.
186
200
 
187
201
  ---
@@ -200,6 +214,7 @@ tri-sync: .faf ──── 8ms ───→ CLAUDE.md + Claude Code's MEMORY
200
214
  The full manual lives at **[docs.faf.one](https://docs.faf.one)** — facts for devs, faf-cli first. One-page overview: **[faf-cli.vercel.app](https://faf-cli.vercel.app)**.
201
215
 
202
216
  - [Getting started](https://docs.faf.one/getting-started) — install · run · use
217
+ - [Cards](https://docs.faf.one/cards) — one `.fafa` → A2A · Server Card · registry · AI Catalog · ARD
203
218
  - [Custom rules](https://docs.faf.one/custom-rules) — pin instructions your AI must follow
204
219
 
205
220
  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)
@@ -210,6 +225,7 @@ For a specific agent: [Grok, xAI & Cursor 👀](docs/faf-cli-for-agents.md) · [
210
225
 
211
226
  Pivotal releases — full history in [CHANGELOG.md](./CHANGELOG.md):
212
227
 
228
+ - **v8.0 — Always33** — one engine, one number: every `.faf` scored against all 33 slots.
213
229
  - **v7.1 — AGENTS.md** — `faf export --agents` authors a complete, non-destructive `AGENTS.md`.
214
230
  - **v7.0 — GIT** — context goes git-native: `faf diff` / `log` / `hooks`.
215
231
  - **v6.16 — Know Your Stack** — every emitted file labels your stack identically.