diff --git a/CHANGELOG.md b/CHANGELOG.md index 90c0ea9f0..321c0d7a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,21 @@ # Changelog -## 1.0.2-beta.0 — 2026-08-19 +## 1.0.2-beta.0 — 2026-08-20 + +### Docs + +- Reposition the project from "runtime failure resolution for coding agents" to observability and enforcement for agent harnesses, across the surfaces that render its identity. The product was never coding-only — `INTEGRATION_TYPES` holds twelve harnesses and two of them (Hermes, a Slack/Telegram gateway; OpenClaw, a self-hosted assistant) were never coding tools — but the strings a stranger reads said otherwise, and the breadth evidence sat under labels that converted it back: README's twelve-logo grid, containing both gateways, was headed "Supported agent CLIs". The README hero, `package.json`'s description and keywords, `SECURITY.md`, `types.ts`, the docs index and quickstart, `reference/harnesses`, the sessions captions, the local dashboard, and the audit share templates now name the harness and define it ostensively on first use, with coding CLIs framed as the class covered deepest rather than the category. `reference/harnesses` is promoted onto the onboarding path in all fifteen locale navs, since it is the only page that answers which kinds of agent are covered and it sat in the last tab. (#731) + +- Correct three counts that had rotted silently, and add the test that stops it recurring. README advertised "30 built-in policies" in three places; the real number is 40, and had been for some time. `__tests__/scripts/copy-counts.test.ts` now derives every count in copy — harnesses, policies, canonical events, and the harnesses on which `PreToolUse` and `Stop` blocking is verified — from `types.ts`, `builtin-policies.ts` and `enforcement-capability.ts`, and fails when prose disagrees. It also asserts that the README names no harness absent from `INTEGRATION_TYPES`, which is what makes the twelve-harness claim checkable by the engineer most likely to check it. (#731) + +- Stop the harness copy folding the Python SDK into the twelve. The twelve are TWO classes — ten coding CLIs and two chat/assistant gateways — and an SDK-instrumented agent is a separate door, not a third class of the twelve. Worse, the copy said "same events, same policies" of all three: the SDK reports events, it does not sit in the tool-call path, so it delivers observability, sessions and audits **without** enforcement, exactly as `reference/python-sdk` has always said. Blocking an unsafe action on that path needs a hook at the runtime's tool boundary. The drift guard now asserts both the two-class split and that no copy describes the SDK as carrying policies. (#731) + +- Point the fourteen translation links at the tree the translation pipeline actually maintains. They resolved to `docs-old/i18n/`, frozen when the Mintlify site replaced it, while `.github/workflows/translate-docs.yml` writes `docs/i18n/` — so every non-English reader got a README that would never be updated again, and the two sets had already diverged. The drift guard asserts the link target. (#731) ### Fixes +- Stop the local audit report claiming it would have blocked things it only detected. `totalHits` folds in `detectorRows` (source `audit-detector`) — replay-only findings with no builtin behind them, whose own fix column renders `audit-only` and which the slipping-through section already labels "caught by audit, not blocked" — yet the TL;DR line users paste publicly said the agent did N things "`failproofai` would have stopped". "Caught" is true of both halves; "would have stopped" was true of one. The same footer also named six integrations when `runAuditInner` defaults to all twelve. (#731) + - Stop the localized navigation referencing pages that were never translated, which is what still discarded a partial run. `--allow-partial` published what succeeded — and then `--update-nav` regenerated the nav from the ENGLISH tree, emitting an entry for the failed page in the language that failed it, so `mintlify validate` rejected the missing file and the job died before its push anyway. The 784 pages that HAD translated went with it, which is precisely the loss `--allow-partial` exists to prevent. Nav generation now omits any localized page whose file is not on disk, prunes a group left with no pages and a tab left with no groups, and keeps an `openapi` group that never had pages to begin with. The check is injected rather than hardcoded, so the pure transform stays testable and the two paths that actually write `docs.json` get the real one. This also closes the same hazard from every other direction it can arrive from — a pruned page, or a translation that only exists on an unmerged branch — because the nav is now derived from what is present rather than from what English says should be. (#725) - Stop the localized nav crashing on a group that has no pages, and stop it dropping the properties it does have. `buildLanguageNav` rebuilt every group as `{group, pages}` and called `group.pages.map(...)` unconditionally. The docs rebuild added `{group, expanded, openapi}` — a group whose content is an OpenAPI spec and has no pages at all — so `--update-nav` died with `TypeError: undefined is not an object`, **after 784 pages had already been translated**, taking the whole nightly run with it for the second night running. Groups are now rebuilt by spreading the English group, so `expanded`, `icon` and `openapi` survive instead of being silently discarded from every non-English nav; a group with no pages is carried through untouched (the spec is not translated, and dropping it would remove the API reference from thirteen languages); and `pages` entries that are themselves nested groups recurse rather than being prefixed as if they were paths. `pages` is optional on the type now, which is what it always was in the data. (#725) diff --git a/README.md b/README.md index 948371c47..ededeb50c 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,13 @@ [![Docs](https://img.shields.io/badge/docs-befailproof.ai-002CA7?style=flat-square)](https://docs.befailproof.ai/) [![License](https://img.shields.io/badge/license-MIT%20%2B%20Commons%20Clause-blue?style=flat-square)](./LICENSE) -**Translations:** [简体中文](./docs-old/i18n/README.zh.md) · [日本語](./docs-old/i18n/README.ja.md) · [한국어](./docs-old/i18n/README.ko.md) · [Español](./docs-old/i18n/README.es.md) · [Português](./docs-old/i18n/README.pt-br.md) · [Deutsch](./docs-old/i18n/README.de.md) · [Français](./docs-old/i18n/README.fr.md) · [Руссий](./docs-old/i18n/README.ru.md) · [हिन्दी](./docs-old/i18n/README.hi.md) · [Türkçe](./docs-old/i18n/README.tr.md) · [Tiếng Việt](./docs-old/i18n/README.vi.md) · [Italiano](./docs-old/i18n/README.it.md) · [العربية](./docs-old/i18n/README.ar.md) · [עברית](./docs-old/i18n/README.he.md) +**Translations:** [简体中文](./docs/i18n/README.zh.md) · [日本語](./docs/i18n/README.ja.md) · [한국어](./docs/i18n/README.ko.md) · [Español](./docs/i18n/README.es.md) · [Português](./docs/i18n/README.pt-br.md) · [Deutsch](./docs/i18n/README.de.md) · [Français](./docs/i18n/README.fr.md) · [Русский](./docs/i18n/README.ru.md) · [हिन्दी](./docs/i18n/README.hi.md) · [Türkçe](./docs/i18n/README.tr.md) · [Tiếng Việt](./docs/i18n/README.vi.md) · [Italiano](./docs/i18n/README.it.md) · [العربية](./docs/i18n/README.ar.md) · [עברית](./docs/i18n/README.he.md) -**Runtime failure resolution for coding agents.** -Hooks into Claude Code and Codex. Catches loops, dangerous actions, and secret leaks -before they become incidents. Zero latency. Runs locally. +**Observability and enforcement for every harness your agents run in.** +Wherever your agents run, we see it — and we can say no. Failproof hooks 12 agent +harnesses — coding CLIs like Claude Code and Codex, chat gateways like Hermes, +self-hosted assistants like OpenClaw — capturing every run and blocking dangerous +tool calls before they execute. 40 built-in policies. Zero latency. Runs locally. @@ -25,7 +27,15 @@ before they become incidents. Zero latency. Runs locally. --- -## Supported agent CLIs +## Supported harnesses + +Twelve harnesses in two classes — ten coding CLIs, and two chat and assistant +gateways (Hermes, OpenClaw). Same events, same policies, same session history, +whichever one your agent runs in. + +Agents that run in none of them report through the [Python SDK](https://docs.befailproof.ai/reference/python-sdk), +which gives you tracing, sessions and audits. Enforcement there needs a hook in +your own runtime — [talk to us](mailto:support@befailproof.ai) and we'll map it.