Skip to content

[failproofai-511] Fix AgentEye languages and translation pipeline#512

Open
NiveditJain wants to merge 9 commits into
mainfrom
luv-511
Open

[failproofai-511] Fix AgentEye languages and translation pipeline#512
NiveditJain wants to merge 9 commits into
mainfrom
luv-511

Conversation

@NiveditJain

@NiveditJain NiveditJain commented Jul 15, 2026

Copy link
Copy Markdown
Member

Description\n\nFix AgentEye locale navigation and harden the automated translation workflow after rebasing it onto the latest main.\n\n- emit Mintlify canonical pt-BR while preserving pt-br/ paths and cache keys\n- restore AgentEye product and language navigation\n- publish translations only when every locale and cache artifact exists\n- pin Mintlify CLI validation to version 4.2.680\n- validate the final tree after overlaying an existing translation PR branch\n- qualify local-data claims for optional authenticated audit reminders and invitations\n- include regression coverage and the required changelog entry\n\n## Type of Change\n\n- [x] Bug fix\n- [x] Documentation\n- [ ] New feature\n- [ ] Breaking change\n\n## Checklist\n\n- [x] Lint: 0 errors; 5 pre-existing warnings\n- [x] TypeScript typecheck\n- [x] Unit tests: 2,018 passed\n- [x] E2E after a clean rebuild: 307 passed, 6 skipped\n- [x] MDX validation: 600 pages\n- [x] Production build\n- [x] Branch contains current main\n\nSupersedes #511 by including its atomic-publishing changes in this PR.

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR updates translation navigation for canonical Portuguese locale casing, strengthens translation-workflow validation, and refreshes policy, audit, configuration, dashboard, quick-start, introduction, and README documentation across supported languages.

Changes

Translation tooling and CI

Layer / File(s) Summary
Canonical locale navigation
scripts/translate-docs/*, __tests__/scripts/translate-docs/*
Adds optional Mintlify locale codes, maps pt-br to pt-BR, and tests the locale and generated navigation.
Consolidation validation
.github/workflows/translate-docs.yml
Installs dependencies without scripts, requires successful translation, and validates Mintlify configuration and translated MDX before consolidation.

Documentation synchronization

Layer / File(s) Summary
Policy and configuration references
docs/*/built-in-policies.mdx, docs/*/configuration.mdx
Updates policy semantics, parameters, workflow Stop behavior, configuration precedence, convention policies, and CLI integration documentation.
Audit and dashboard references
docs/*/cli/audit.mdx, docs/*/dashboard.mdx
Updates audit inputs, report sections, cache behavior, dashboard data sources, CLI coverage, session viewing, and development-origin guidance.
Getting-started and introductory content
docs/*/getting-started.mdx, docs/*/introduction.mdx, docs/i18n/*
Refreshes installation examples, supported CLIs, policy decisions, local execution notes, team-policy instructions, navigation copy, and translated README content.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested labels: enhancement

Suggested reviewers: github-actions[bot]

Poem

I’m a rabbit with docs in my burrow,
New locales hop neatly in line.
Mintlify checks every page,
While translations sparkle and shine.
“pt-BR!” I thump—what a fine design!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly matches the main change: locale/navigation fixes and translation pipeline hardening.
Description check ✅ Passed The description follows the template and includes the required Description, Type of Change, and Checklist sections.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.github/workflows/translate-docs.yml (1)

136-137: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Pin the Mintlify CLI version to ensure deterministic builds.

As indicated by static analysis tools, installing the mintlify package globally without a version pin is an ad-hoc installation. This can lead to unexpected CI failures if a new major version of the CLI introduces breaking changes.

Consider pinning the version to guarantee stability, or executing it locally via bunx mintlify validate if it's already specified in your package.json.

🛠️ Proposed fix
-      - name: Install Mintlify CLI
-        run: npm install -g mintlify
+      - name: Install Mintlify CLI
+        run: npm install -g mintlify@^4.0.0 # replace with your current known-good version
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/translate-docs.yml around lines 136 - 137, Update the
“Install Mintlify CLI” step to use a specific pinned Mintlify version instead of
installing the unversioned package globally. Alternatively, reuse the project’s
declared dependency through the existing package runner if Mintlify is already
listed in package.json, while preserving the workflow’s current CLI behavior.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/workflows/translate-docs.yml:
- Around line 136-137: Update the “Install Mintlify CLI” step to use a specific
pinned Mintlify version instead of installing the unversioned package globally.
Alternatively, reuse the project’s declared dependency through the existing
package runner if Mintlify is already listed in package.json, while preserving
the workflow’s current CLI behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 88a03be7-2b43-4f13-aec1-28ce247c5a08

📥 Commits

Reviewing files that changed from the base of the PR and between fdf4afe and 6638796.

📒 Files selected for processing (7)
  • .github/workflows/translate-docs.yml
  • __tests__/scripts/translate-docs/config.test.ts
  • __tests__/scripts/translate-docs/mintlify-nav.test.ts
  • docs/docs.json
  • scripts/translate-docs/config.ts
  • scripts/translate-docs/mintlify-nav.ts
  • scripts/translate-docs/types.ts

@NiveditJain NiveditJain changed the title [failproofai-511] Fix AgentEye language navigation pipeline [failproofai-511] Fix AgentEye languages and translation pipeline Jul 15, 2026
@hermes-exosphere

Copy link
Copy Markdown
Contributor

Automated code review started - full review. Results will be posted here.

@hermes-exosphere

Copy link
Copy Markdown
Contributor

Hermes Code Review — Phase 1: Setup & Build

  • Repo cloned, PR branch luv-511 checked out (2 commits: da39629, 5e43775)
  • Dependencies installed: 558 packages
  • Running test suite now...

@hermes-exosphere

Copy link
Copy Markdown
Contributor

Hermes Code Review — Build & Test Complete

  • TypeScript: 0 errors (clean compilation)
  • ESLint: 0 errors (on changed files)
  • Test Suite: 1954 passed / 0 failed (109 test files)
  • Config Tests: 19/19 passed (includes new mintlifyCode test)
  • Navigation Tests: 15/15 passed (includes new pt-BR locale test)

No regressions introduced. Now posting detailed review...

Comment thread .github/workflows/translate-docs.yml Outdated
Comment thread __tests__/scripts/translate-docs/mintlify-nav.test.ts
@hermes-exosphere

Copy link
Copy Markdown
Contributor

Automated code review started - full review. Results will be posted here.

@hermes-exosphere

Copy link
Copy Markdown
Contributor

Hermes Code Review — Phase 3: Build and Verification

Running test suite and checking build...

@hermes-exosphere

Copy link
Copy Markdown
Contributor

Hermes Code Review — Build and Test Complete

Check Result
TypeScript (tsc --noEmit) ✅ 0 errors
ESLint ✅ 0 errors on changed files
Unit Tests 1,954 passed / 0 failed (109 test files)
Config Tests (incl. new mintlifyCode test) ✅ 19/19 passed
Navigation Tests (incl. pt-BR locale test) ✅ 15/15 passed
Translate-docs Tests ✅ All passing
MDX Validation Tests ✅ 9/9 passed

Full review findings below.

Comment thread .github/workflows/translate-docs.yml Outdated
@hermes-exosphere

Copy link
Copy Markdown
Contributor

🔍 Automated Code Review — Hermes Agent

📋 Executive Summary

This PR fixes two translation pipeline issues: (1) emitting Mintlify's canonical pt-BR locale while keeping pt-br/ for internal paths, and (2) restoring the AgentEye language selector. It also makes the CI translation pipeline more robust by requiring all languages to succeed before publishing (atomic), skipping redundant builds (--ignore-scripts), and validating generated docs before opening a PR. Overall code quality is good — clean implementation with thorough tests.


📊 Change Architecture

graph TD
    A["config.ts: LANGUAGES array"] -->|"adds mintlifyCode field"| B["types.ts: LanguageConfig"]
    B --> C["mintlify-nav.ts: buildLanguageNav()"]
    C -->|"uses getLanguageByCode().mintlifyCode ?? lang"| D["docs.json output"]
    C --> E["AgentEye product nav"]
    F["CI: translate-docs.yml"] -->|"--ignore-scripts + atomic consolidate"| G["consolidate job"]
    G -->|"new: mintlify validate + validate:mdx"| H["PR opened only if valid"]
    style C fill:#87CEEB
    style F fill:#FFD700
    style G fill:#FFD700
    style D fill:#90EE90
Loading

Legend: 🟢 New output | 🔵 Modified core logic | 🟡 CI pipeline change


🔴 Breaking Changes

✅ No breaking changes detected. The LanguageConfig interface adds an optional mintlifyCode field — backward compatible. The CI workflow changes only affect internal pipeline behavior (stricter failure handling).


⚠️ Issues Found

  1. 🟡 Warning.github/workflows/translate-docs.yml:140 — Mintlify CLI installed without version pin. A future breaking release could break validation silently. [Re-reported from prior review — see inline comment.]

🔬 Logical / Bug Analysis

Config Changes (config.ts, types.ts):

  • mintlifyCode is optional — only pt-br defines it. Falls back to code when absent. Clean design.
  • getLanguageByCode already existed. Using it in buildLanguageNav is correct and testable.
  • ⚪ The config LANGUAGES array formatting was expanded to multi-line objects for several languages (ru, hi, vi, ar, he, zh). This is purely cosmetic but in a separate file from the feature — mildly increases diff noise but is harmless.

Navigation Changes (mintlify-nav.ts):

  • getLanguageByCode(lang)?.mintlifyCode ?? lang — correctly handles undefined (unknown lang) and missing mintlifyCode (all other languages). The ?? lang fallback preserves existing behavior for every language except pt-br.
  • buildLanguageNav already prefix-pages with lang code, so the folder path (pt-br/introduction) is preserved independently of the locale value. This is the key invariant: folder paths use internal codes, Mintlify locale uses canonical casing.

CI Workflow Changes (translate-docs.yml):

  • Atomic publishing — Changing consolidate from always() && != cancelled to == success prevents partial translation sets. This is the right behavior.
  • ⚠️ Edge case: If a single language consistently fails (e.g., API issues for one locale), translations for all 14 languages are blocked. Consider adding a retry mechanism or allowing per-language failure tolerance with explicit opt-in. Not a blocker — just noting the trade-off.
  • --ignore-scripts in bun install — avoids running the full Next.js build (prepare hook) per-language. Well-documented with comments.
  • mintlify validate + bun run validate:mdx before PR creation — catches broken docs configs and malformed MDX before they hit the repo. Good safety net.
  • continue-on-error: true removed from artifact download — combined with the == success gate on consolidate, ensures no silent partial merges.

Test Changes:

  • ✅ Config test: New mintlifyCode assertion verifies pt-brpt-BR mapping at the config level.
  • ✅ Navigation test: New test verifies buildLanguageNav("pt-br")language: "pt-BR" with pt-br/introduction paths preserved. Correctly tests both the locale and the path invariant.
  • ⚪ The test verifies the integration but doesn't explicitly use getLanguageByCode directly. However, since buildLanguageNav calls it internally, an integration test at the nav level is more valuable than a unit test of the call chain.

🧪 Evidence — Build & Test Results

TypeScript Compilation
$ bunx tsc --noEmit
(exit 0 — no errors)
Test Suite (full)
Test Files  109 passed (109)
     Tests  1954 passed (1954)
  Duration  47.40s

Key files:
- config.test.ts: 19/19 passed (includes mintlifyCode test)
- mintlify-nav.test.ts: 15/15 passed (includes pt-BR locale test)
- validate-mdx.test.ts: 9/9 passed

🔗 Issue Linkage

PR title references failproofai-511 — supersedes #511 by including its atomic-publishing changes. No linked issues found.


👥 Human Review Feedback

No human review comments on this PR at time of review.


💡 Suggestions

  1. Minimize diff noise: The LANGUAGES array reformatting (multi-line objects for ru, hi, vi, ar, he, zh) could be split into a separate cosmetic PR. This PR's diff is ~50% formatting changes unrelated to the feature.
  2. Mintlify version pinning: As noted in the inline comment, consider pinning mintlify@^4.0.0 for CI determinism.
  3. Single-language failure tolerance: Consider whether a single language failure should block all 14. A future enhancement could allow publishing 13/14 with a generated comment noting which language failed.

🏆 Verdict

VERDICT: APPROVED

All tests pass (1954/1954), TypeScript is clean, the implementation is correct, and the CI improvements are well-reasoned. One non-blocking suggestion about version pinning was re-reported. No blocking issues found.


Automated code review · 2026-07-15 03:29 UTC

@hermes-exosphere hermes-exosphere left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review: Approved. ✅ All 1,954 tests pass, TypeScript is clean. One non-blocking suggestion re-reported (Mintlify version pinning).

@hermes-exosphere

Copy link
Copy Markdown
Contributor

Resolved 1 previously-reported issue that has been addressed in this update:

  • Thread on mintlify-nav.test.ts:216 — the test now verifies canonical pt-BR locale through buildLanguageNav, which internally uses getLanguageByCode().

One issue remains open (Mintlify version pinning — re-reported as inline comment).

chhhee10 and others added 3 commits July 15, 2026 12:07
…gravity (12 CLIs), remove Gemini (#508)

* feat: OpenClaw (openclaw gateway) integration — real-time enforcement + audit

Adds OpenClaw as the 9th CLI/agent integration, dual-pillar like Hermes:

Pillar 1 (live enforcement) — OpenClaw's in-process plugin hooks (its
file-based "internal hooks" are observation-only and cannot block):
  - openclaw-plugin/ shipped package (manifest + plain-ESM index.js) that
    async-spawns the failproofai binary and maps a flat {permission,reason}
    verdict to each hook's native return shape (before_tool_call →
    {block:true,blockReason}; before_agent_run → {outcome:"block"};
    before_agent_finalize → {action:"revise"}).
  - OPENCLAW_EVENT_MAP / TOOL_MAP / TOOL_INPUT_MAP in types.ts; handler +
    tool-name-canonicalize + policy-evaluator branches; the openclaw
    Integration (install/uninstall manages plugins.load.paths +
    plugins.entries.failproofai in ~/.openclaw/openclaw.json); bin plumbing.

Pillar 2 (audit + dashboard) — reads the real JSONL transcripts at
~/.openclaw/agents/<agentId>/sessions/<uuid>.jsonl:
  - lib/openclaw-sessions.ts (pure type-discriminated parser, UUID-safe
    discovery) + lib/openclaw-projects.ts (sessions.json index, agentId
    grouping) + src/audit/cli-adapters/openclaw.ts.
  - Dashboard wiring: cli-registry, projects, download-session, app routes.

Verified live against openclaw v2026.7.1 (tool block confirmed end-to-end;
hook payloads, tool ids, and transcript schema captured from a real gateway).
Tests mirror the Hermes matrix. All maps are validated, not provisional.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: document OpenClaw integration (CHANGELOG + CLAUDE.md)

- CHANGELOG 0.0.13-beta.3 entry (Features + Docs).
- CLAUDE.md "OpenClaw hooks" section: plugin-not-shell-hook enforcement
  surface, async-spawn design, per-hook verdict mapping, the real Stop gate,
  audit layout, and the auth-profile / bundledDiscovery setup gotchas.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(openclaw): organize dashboard by channel with readable session names

Live testing surfaced two UX issues: OpenClaw routes gateway sessions through
the agent's default key (agent:<id>:main) and records the channel in metadata
(lastChannel / chatType / origin.{label,provider,from}), NOT in the session key.
So the prior key-parsing grouped everything under "openclaw-main" (which the
dashboard's decodeFolderName rendered as the confusing "openclaw/main") and
named sessions with the raw "agent:main:main" key.

Now group projects by channel (telegram/slack/…/local, like Hermes groups by
source) and name sessions from the human-readable origin.label — so it reads
as "openclaw / telegram" → "Chetan (@chhhee10) id:8674922496" with the chat
id/type in the gateway-metadata columns. Verified live against openclaw v2026.7.1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: remove Gemini CLI integration entirely

Google retired Gemini CLI (consumer accounts stopped 2026-06-18) in favor of
the closed-source Antigravity CLI (agy), which failproofai is migrating to.

Removes the `gemini` id from INTEGRATION_TYPES, the INTEGRATIONS/ADAPTERS
registries, KNOWN_CLI_IDS, all GEMINI_* event/tool maps, the gemini audit
adapter + lib/gemini-{projects,sessions}.ts, the --cli gemini install/audit
paths (bin + docs), and the dashboard's Gemini session provider. Deletes the
gemini logo assets and the .gemini dogfood config.

Keeps the ~/.gemini/ config-file protections in the block-* builtins and
re-points them at Antigravity (which reuses that directory). Fixes a latent
bug where OpenClaw sessions without a cwd were mislabeled "Gemini CLI" in the
session viewer. Docs + all 14 locale mirrors swept; tsc/build/tests green
(111 files, 1916 tests).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: add Factory droid (droid) CLI integration

9th CLI integration. Factory droid is a Claude-shaped external-shell-hook CLI,
but with two contract quirks that were live-verified against droid v0.171.0
(and differ from Factory's published docs):

- hooks.json uses event names at the TOP LEVEL (no `{"hooks":{...}}` wrapper —
  droid rejects the wrapper as unknown keys). Tool events carry matcher:"*".
- deny is driven by EXIT CODE 2 + stderr, not a JSON decision (droid ignores
  the JSON decision field). Stop uses `{decision:"block"}` for require-*-before-stop.

Payload is Claude snake_case (no normalization); FACTORY_TOOL_MAP maps
Execute→Bash, Create→Write, etc. Config at ~/.factory/hooks.json (user) /
.factory/hooks.json (project); binary probe `droid`. Audit reads the JSONL
transcripts at ~/.factory/sessions/<enc-cwd>/<id>.jsonl (Claude-style adapter).

Wires all surfaces: types union + maps, Integration + registry, canonicalize,
policy-evaluator deny/instruct branches, audit adapter + lib providers,
cli-registry, projects/download-session, app pages, bin VALID_CLIS + help.
Adds unit + e2e + canonicalize tests, CLAUDE.md section, CHANGELOG, docs.
tsc/lint clean; 1932 unit + 289 e2e tests pass; build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: add Devin CLI (devin) integration

10th CLI integration. Devin CLI is a pure Claude-clone for hooks — same
snake_case payloads (hook_event_name, tool_name, tool_input, tool_use_id),
so the Integration is modeled verbatim on claudeCode with a "hooks" key in
~/.config/devin/config.json (user) / .devin/config.json (project). Verified
live against devin v3000.1.27: deny via {"decision":"block","reason"} on stdout
blocks the tool (and overrides --permission-mode dangerous). DEVIN_TOOL_MAP
maps exec→Bash (tool_input.command already canonical); no payload/event maps.

Audit reads the SQLite store at ~/.local/share/devin/cli/sessions.db
(sessions.working_directory → per-project grouping, message_nodes.chat_message
JSON). Devin's tool_calls use a flat {id,name,arguments-as-object} shape (not
the OpenAI wire form), so lib/devin-sessions.ts uses a Devin-specific
normalizer; created_at prefers the higher-precision metadata ISO string.

All 16 surfaces wired; unit + e2e + SQLite-parser tests added; CLAUDE.md
section, CHANGELOG, docs. tsc/lint clean; 1956 unit + 297 e2e pass; build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: add Antigravity CLI (agy) integration — Gemini's successor

11th CLI integration. Antigravity CLI (`agy`, Google's closed-source Go
replacement for the retired Gemini CLI) has its OWN hook contract — NOT a
Claude clone. Live-verified against agy v1.1.2.

- Named-hook schema: hooks.json = {"failproofai": {"PreToolUse":[{matcher,hooks}],
  "PreInvocation":[{...}], "Stop":[{...}]}} at ~/.gemini/config/hooks.json (user)
  / .agents/hooks.json (project). Tool events use a {matcher,hooks} wrapper;
  PreInvocation/Stop are flat handler arrays.
- camelCase protojson payload → the handler normalizes toolCall.name→tool_name,
  toolCall.args→tool_input, conversationId→session_id, workspacePaths[0]→cwd,
  transcriptPath→transcript_path before the usual canonicalization.
- Own response shapes: PreToolUse deny → {decision:"deny",reason}; Stop →
  {decision:"continue",reason} (re-enters the loop, so require-*-before-stop
  enforce); instruct → PreInvocation {injectSteps:[{ephemeralMessage}]}.
- ANTIGRAVITY_TOOL_MAP (run_command→Bash, view_file→Read, ...) +
  ANTIGRAVITY_TOOL_INPUT_MAP (Bash: CommandLine→command, Cwd→cwd).
- Audit reads plain JSONL transcript_full.jsonl under
  ~/.gemini/antigravity-cli/brain/<id>/.system_generated/logs/, indexed by
  conversation_summaries.db (falls back to brain/ dir scan when the index is empty).

Keeps the ~/.gemini/ path guards (relabeled for Antigravity in the Gemini
removal). All 16 surfaces wired; unit + e2e + parser tests; CLAUDE.md section,
CHANGELOG, docs. tsc/lint clean; 1976 unit + 306 e2e pass; build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: backfill OpenClaw into user-facing docs + document VS Code coverage

Two documentation gaps closed:

1. OpenClaw was shipped as a fully-wired integration but was never added to the
   user-facing supported-CLI lists. Backfills it into README + docs
   (configuration / getting-started / introduction): a dual-pillar bullet after
   Hermes, the --cli lists, install examples, and the detection list.

2. Documents that VS Code's Copilot Chat agent mode (Preview) needs no dedicated
   integration — its agent hooks load from .github/hooks/*.json,
   ~/.copilot/hooks/*.json, and ~/.claude/settings.json (the exact paths the
   copilot/claude integrations already write), verified live against VS Code
   1.127 / github.copilot-chat 0.55.0. So `--cli copilot` (or --cli claude)
   already enforces in VS Code agent-mode sessions. Adds a CLAUDE.md section +
   a docs note.

No code change. tsc/build/tests green (115 files, 1976 tests).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* refactor: make resolve-transcript-path enumerate openclaw explicitly

Add an explicit `case "openclaw"` (functionally a no-op that returns undefined,
same as the default) documenting that OpenClaw's transcript_path comes from its
plugin shim's stdin and its audit reads sessions directly via
lib/openclaw-sessions.ts. Makes the switch cover all 11 CLIs explicitly so the
wiring is unambiguous for future integrations. No behavior change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: drop brittle line-number cross-refs from policy-evaluator comments

Replace stale `(line ~N)` / `at line ~N` comment cross-references (which went
out of date when the Gemini branches were removed and shift on every edit) with
descriptive references to the mirrored per-CLI branches. Comment-only; no
behavior change. Avoids automated-review flags on outdated line numbers.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: add Goose (codename goose, Block) as the 12th CLI integration

Dual-pillar like Hermes/OpenClaw/Factory/Devin/Antigravity — real-time policy
enforcement + offline audit. Enforcement uses Goose's "hooks" system (the
cross-agent Open Plugins spec): the installer drops an auto-discovered plugin
dir at ~/.agents/plugins/failproofai/hooks/hooks.json (user/project). Deny is
{"decision":"block"} JSON on PreToolUse only (goose >= v1.37.0); goose has no
Stop event, so require-*-before-stop is inapplicable (like Hermes). Audit reads
the SQLite sessions.db (cwd-grouped like Devin; Claude-style content_json).
Verified live end-to-end against goose v1.43.0 (real sudo blocked; real
sessions.db read). Follows the Factory (enforcement) + Devin (SQLite audit)
templates.

Also backfills the README supported-CLI logo grid (openclaw/factory/devin/
antigravity/goose were missing) with dark/light variants, and documents Goose
across CLAUDE.md + docs/{getting-started,configuration}.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: link each supported-CLI logo to its official site

Point the 9 logos the maintainer supplied URLs for at their official pages
(codex→learn.chatgpt.com, copilot→github.com/features/copilot/cli, cursor,
opencode, pi, hermes, openclaw, factory, goose→goose-docs.ai); claude/devin/
antigravity keep their existing links.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(hooks): correct Antigravity file-tool map + quiet channel-less allow-notes

Two issues surfaced while testing every CLI:

1. Antigravity file writes weren't gated. ANTIGRAVITY_TOOL_MAP had guessed tool
   names (`write_file`/`list_directory`/`find_filepath`) — the real ones (from
   the agy binary + live transcripts) are `write_to_file`/`list_dir`/
   `find_by_name`, and there was no input-key map for file tools, so the path
   (delivered as `TargetFile`) never became `file_path`. Result: block-env-files
   / block-secrets-write silently allowed `.env` writes on Antigravity. Corrected
   the tool names and added Write/Edit/Read input maps (TargetFile→file_path,
   CodeContent→content). Verified live: agy now denies a `.env` write.

2. Noisy Stop-hook output. Informational allow-notes were emitted as stdout
   `{reason}` on events with no agent-facing context channel (Stop, SubagentStop,
   Session*, …), so a passing Stop rendered as a "…skipping commit check…skipping
   PR check…" wall (visible e.g. in droid). Those notes now go to stderr + the
   activity store only; stdout stays clean on channel-less events.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(readme): arrange the 12 CLI logos as 2 rows of 6

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(audit): reconstruct Devin's active conversation path (de-dup the forest)

Devin stores a session's messages as a FOREST (node_id/parent_node_id) and
replays earlier context under fresh roots on later turns, so message_nodes holds
many branches that repeat the same messages — verified live: 26-31 raw nodes for
8-10 real messages. The parser read every node in node_id order, so the dashboard
rendered each message 2-4× (a wall of duplicated "Create a file named .env…").

Reconstruct the real conversation instead: walk parent_node_id from the newest
leaf (max node_id) to its root and reverse. Devin sessions now render the true
8-10 message conversation. Adds devinActiveConversationPath + unit tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore(release): finalize CHANGELOG + dogfood the 4 newest CLIs

- CHANGELOG: add the missing Fixes section (Antigravity file-tool map, quiet
  channel-less allow-notes, Devin forest de-dup) and a Docs entry for the README
  logo grid.
- Dogfood: ship project-scope configs for Factory (.factory/hooks.json), Devin
  (.devin/config.json), Antigravity (.agents/hooks.json), and Goose
  (.agents/plugins/failproofai/hooks/hooks.json) using the dev
  `bun bin/failproofai.mjs` command — generated from each integration's own
  writeHookEntries so they track the live schema. Documented in CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore(release): bump to 0.0.14-beta.1

main shipped 0.0.13 stable (#506) without this CLI-expansion work, so it releases
as 0.0.14-beta.1. Moves the branch's CHANGELOG entries into a fresh 0.0.14-beta.1
section above the released 0.0.13.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(changelog): reference PR #508

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: complete the dashboard + config CLI lists for all 12 agents

The dashboard project-list description, session-viewer/activity badge lists, the
?cli= filter, and the auto-detect list only covered the original 7 CLIs. Add the
five newer ones (OpenClaw, Factory Droid, Devin, Antigravity, Goose) with their
session-store paths and badge colors. Caught by the PR #508 automated review.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
@hermes-exosphere

Copy link
Copy Markdown
Contributor

Automated code review started - full review. Results will be posted here.

@coderabbitai coderabbitai Bot added the enhancement New feature or request label Jul 15, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
docs/zh/getting-started.mdx (1)

169-175: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the uninstall description for multi-CLI installations.

Line 175 says only ~/.claude/settings.json is modified, although this guide installs hooks for twelve CLI targets. Describe removal from the selected/detected CLI hook configurations while noting that ~/.failproofai/ is retained.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/zh/getting-started.mdx` around lines 169 - 175, Update the uninstall
section in the getting-started documentation to describe removing hook entries
from the selected or detected CLI hook configurations, rather than only
~/.claude/settings.json. Retain the statement that configuration files in
~/.failproofai/ are preserved.
docs/pt-br/getting-started.mdx (1)

169-175: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Describe multi-CLI uninstallation accurately.

The installation flow writes hooks for twelve integrations, while this says uninstall only removes ~/.claude/settings.json. Document that it removes the selected agents’ hook entries.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/pt-br/getting-started.mdx` around lines 169 - 175, Atualize a seção
“Desinstalação” em getting-started.mdx para informar que o comando remove as
entradas de hook dos agentes selecionados, em vez de mencionar apenas
~/.claude/settings.json. Preserve a observação de que os arquivos de
configuração em ~/.failproofai/ são mantidos.
docs/it/getting-started.mdx (1)

169-175: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Document uninstall behavior for every selected CLI.

policies --uninstall is presented elsewhere as integration-aware, but this says it only removes entries from ~/.claude/settings.json. Describe removal from the selected/detected CLI hook configurations while retaining ~/.failproofai/.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/it/getting-started.mdx` around lines 169 - 175, Update the Italian
“Disinstallazione” section for the `policies --uninstall` command to describe
removing hook entries from the selected or detected CLI integration
configurations, rather than only `~/.claude/settings.json`. Preserve the
statement that configuration files in `~/.failproofai/` are retained.
🟡 Minor comments (43)
docs/he/getting-started.mdx-187-189 (1)

187-189: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the stale built-in policy count.

This card says 26 policies, while the updated introduction and built-in policy reference consistently state 39.

Proposed fix
 <Card title="מדיניות מובנה" icon="shield" href="/he/built-in-policies">
-  כל 26 המדיניות עם פרמטרים
+  כל 39 המדיניות עם פרמטרים
 </Card>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/he/getting-started.mdx` around lines 187 - 189, Update the policy count
in the Card content near the built-in policies link from 26 to 39, keeping the
existing Hebrew title, icon, href, and surrounding text unchanged.
docs/zh/dashboard.mdx-29-32 (1)

29-32: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Complete the CLI badge list.

Line 31 omits OpenClaw, Factory Droid, Devin, Antigravity, and Goose despite line 27 stating their projects are displayed. Add their badges/colors or make the list explicitly non-exhaustive.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/zh/dashboard.mdx` around lines 29 - 32, Update the CLI badge list in the
project display description to include OpenClaw, Factory Droid, Devin,
Antigravity, and Goose with their corresponding badge colors, consistent with
the supported project list; alternatively, explicitly mark the existing list as
non-exhaustive.
docs/zh/getting-started.mdx-187-189 (1)

187-189: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the built-in policy count.

The card says 26 policies, while this PR’s introduction and built-in-policy page document 39.

-  全部 26 条策略及其参数
+  全部 39 条策略及其参数
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/zh/getting-started.mdx` around lines 187 - 189, Update the “内置策略” Card
content in docs/zh/getting-started.mdx to state that there are 39 built-in
policies instead of 26, keeping the existing title, icon, href, and surrounding
wording unchanged.
docs/fr/built-in-policies.mdx-47-48 (1)

47-48: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the require- definition with the other policy prefixes.

The require- bullet now appears after the namespace explanation, disconnected from the block-, warn-, and sanitize- list on Lines 28–30. Move it back into that list so the namespace paragraph remains cohesive.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/fr/built-in-policies.mdx` around lines 47 - 48, Move the `require-`
bullet from after the namespace explanation into the policy-prefix list
alongside `block-`, `warn-`, and `sanitize-`. Keep the namespace paragraph
cohesive and preserve the existing definition of `require-`.
docs/fr/cli/audit.mdx-58-58 (1)

58-58: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

List all supported offline audit sources.

This list omits Hermes, OpenClaw, Factory Droid, Devin, Antigravity, and Goose, although the dashboard and configuration pages explicitly identify each as an offline audit source.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/fr/cli/audit.mdx` at line 58, Update the offline audit source list in
the dashboard description to include Hermes, OpenClaw, Factory Droid, Devin,
Antigravity, and Goose alongside the existing agents. Keep the existing
description and formatting unchanged otherwise.
docs/fr/configuration.mdx-199-199 (1)

199-199: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the stale “five other CLIs” count.

The section now documents twelve integrations, so describing OpenCode as different from “the five other CLIs” is no longer accurate. Use “les autres CLI” instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/fr/configuration.mdx` at line 199, Update the OpenCode description to
replace “les cinq autres CLI” with “les autres CLI”, leaving the surrounding
explanation unchanged.
docs/built-in-policies.mdx-713-733 (1)

713-733: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

The Stop-semantics tables omit newly supported integrations. Configuration documentation says OpenClaw, Factory Droid, Devin, and Antigravity expose enforceable end-of-turn hooks, making the six-CLI count and “other five” recommendation stale.

  • docs/built-in-policies.mdx#L713-L733: add the four integrations and update the count/recommendation.
  • docs/fr/built-in-policies.mdx#L707-L727: apply the equivalent correction to the French table and prose.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/built-in-policies.mdx` around lines 713 - 733, Update the Stop-semantics
table and surrounding prose in docs/built-in-policies.mdx (lines 713-733) to
include OpenClaw, Factory Droid, Devin, and Antigravity, revise the
supported-integration count, and replace the “other five” recommendation with
the correct number while preserving each integration’s documented hook behavior.
Apply the equivalent table and prose corrections in
docs/fr/built-in-policies.mdx (lines 707-727), including all four integrations
and updated counts/recommendations.
docs/fr/cli/audit.mdx-95-95 (1)

95-95: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the malformed conditional phrase.

“qu'aurait-il s'est passé” is ungrammatical; use “ce qui se serait passé en 2025”.

Proposed correction
- elles n'ont pas d'interprétation significative du type « qu'aurait-il s'est passé en 2025 »
+ elles n'ont pas d'interprétation significative du type « ce qui se serait passé en 2025 »
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/fr/cli/audit.mdx` at line 95, Dans la phrase de la section « Politiques
de workflow ignorées », remplacez la formulation conditionnelle mal formée «
qu'aurait-il s'est passé en 2025 » par « ce qui se serait passé en 2025 », sans
modifier le reste du texte.
docs/ar/introduction.mdx-12-12 (1)

12-12: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Finish the Arabic localization.

Correct إنبيهك to تنبيهك, and translate the two shell comments so the quick-start block is fully Arabic.

Also applies to: 53-54

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ar/introduction.mdx` at line 12, Finish the Arabic localization in the
introduction by correcting “إنبيهك” to “تنبيهك” and translating both shell
comments in the quick-start block at the referenced lines into Arabic, while
leaving the commands unchanged.
docs/de/cli/audit.mdx-12-14 (1)

12-14: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the German audit copy.

Use der Archetyp, replace einzeiliger with einseitiger, and correct Korrektourliste to Korrekturliste.

Also applies to: 63-69

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/de/cli/audit.mdx` around lines 12 - 14, Überarbeite die deutsche
Audit-Dokumentation: verwende „der Archetyp“, ersetze „einzeiliger“ durch
„einseitiger“ und korrigiere „Korrektourliste“ zu „Korrekturliste“ in allen
betroffenen Textstellen, einschließlich des zusätzlich genannten Abschnitts.
docs/de/configuration.mdx-144-144 (1)

144-144: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Close the German quotations consistently.

Replace the trailing ASCII quotes with in both sentences.

Also applies to: 169-169

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/de/configuration.mdx` at line 144, In docs/de/configuration.mdx, update
both German quotation sentences containing “Force-pushing is blocked...” and the
corresponding occurrence to use the closing German quotation mark `“` instead of
the trailing ASCII `"`, keeping the existing text unchanged.

Source: Linters/SAST tools

docs/de/getting-started.mdx-187-189 (1)

187-189: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the stale built-in policy count.

This card says 26 policies, while the refreshed documentation consistently documents 39.

Proposed fix
 <Card title="Integrierte Richtlinien" icon="shield" href="/de/built-in-policies">
-  Alle 26 Richtlinien mit Parametern
+  Alle 39 Richtlinien mit Parametern
 </Card>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/de/getting-started.mdx` around lines 187 - 189, Update the “Integrierte
Richtlinien” card text in the getting-started documentation from 26 to 39
policies, keeping the existing title, icon, link, and surrounding wording
unchanged.
docs/ar/getting-started.mdx-169-175 (1)

169-175: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Describe uninstall behavior for all supported CLIs.

This now documents installation across multiple agents, but says uninstall only removes ~/.claude/settings.json entries. Clarify that it removes hooks for the targeted/detected integrations while retaining failproofai configuration files.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ar/getting-started.mdx` around lines 169 - 175, Update the Arabic
uninstall section around the `failproofai policies --uninstall` command to
describe removing hooks from all targeted or detected supported CLI
integrations, rather than only `~/.claude/settings.json`, while preserving the
statement that FailproofAI configuration files in `~/.failproofai/` are
retained.
docs/ar/dashboard.mdx-28-32 (1)

28-32: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the mixed-language translation artifacts.

Replace jلسات with جلسات and translate into the intended Arabic color name.

Also applies to: 87-87

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ar/dashboard.mdx` around lines 28 - 32, In the Arabic dashboard
documentation, correct the mixed-language artifacts by replacing “jلسات” with
“جلسات” in the Hermes description and translating the “靛” color label in the
Hermes badge list to its intended Arabic color name. Keep all other wording and
CLI descriptions unchanged.
docs/configuration.mdx-199-199 (1)

199-199: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Synchronize the supported-agent matrix across the refreshed documentation.

Several pages still reflect the previous integration set:

  • docs/configuration.mdx#L199-L199: replace the stale “other five CLIs” count with capability-based wording.
  • docs/introduction.mdx#L8-L8: add Goose to the supported-agent summary.
  • docs/ar/built-in-policies.mdx#L708-L730: add OpenClaw, Factory Droid, Devin, and Antigravity to the Stop-semantics matrix.
  • docs/ar/cli/audit.mdx#L50-L50: add the newly supported offline audit sources.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/configuration.mdx` at line 199, Synchronize the supported-agent
documentation across all listed sites: in docs/configuration.mdx lines 199-199
replace “other five CLIs” with capability-based wording; in
docs/introduction.mdx lines 8-8 add Goose to the supported-agent summary; in
docs/ar/built-in-policies.mdx lines 708-730 add OpenClaw, Factory Droid, Devin,
and Antigravity to the Stop-semantics matrix; and in docs/ar/cli/audit.mdx lines
50-50 add the newly supported offline audit sources.
docs/ar/configuration.mdx-203-203 (1)

203-203: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the stray bold marker after “ذاتية الاستضافة”.

The unmatched ** can bold an unintended portion of this long paragraph.

Proposed fix
-  - **OpenClaw (openClaw gateway)**: ... OpenClaw هو بوابة متعددة القنوات ذاتية الاستضافة **، لذا يعترض ...
+  - **OpenClaw (openClaw gateway)**: ... OpenClaw هو بوابة متعددة القنوات ذاتية الاستضافة، لذا يعترض ...
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ar/configuration.mdx` at line 203, Remove the stray unmatched bold
marker immediately after “ذاتية الاستضافة” in the OpenClaw paragraph, preserving
the intended emphasis and all surrounding text.
docs/es/dashboard.mdx-29-31 (1)

29-31: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Complete the project badge inventory in both translations. Both pages list twelve supported CLIs but document project-row badges only through Hermes.

  • docs/es/dashboard.mdx#L29-L31: add OpenClaw, Factory Droid, Devin, Antigravity, and Goose badge labels.
  • docs/pt-br/dashboard.mdx#L29-L31: add the same five badge labels.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/es/dashboard.mdx` around lines 29 - 31, Complete the CLI badge inventory
in the project-row descriptions by adding OpenClaw, Factory Droid, Devin,
Antigravity, and Goose to docs/es/dashboard.mdx lines 29-31 and
docs/pt-br/dashboard.mdx lines 29-31, preserving the existing translations and
badge color style.
docs/es/built-in-policies.mdx-692-701 (1)

692-701: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add Comportamiento de IA to the overview table.

The new warn-repeated-tool-calls category is missing from Lines 15–26, so the overview lists only 38 of the documented 39 policies.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/es/built-in-policies.mdx` around lines 692 - 701, Update the overview
table near the document’s policy summary to add the missing “Comportamiento de
IA” category and link it to the corresponding section heading, ensuring all 39
documented policies are represented while preserving the existing table
structure.
docs/es/cli/audit.mdx-58-60 (1)

58-60: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Do not claim that all 39 policies are replayed.

Lines 94–95 exclude warn-repeated-tool-calls and the five require-*-before-stop policies. Adjust this sentence to describe the applicable real-time policies rather than all 39.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/es/cli/audit.mdx` around lines 58 - 60, Actualiza la frase de
docs/es/cli/audit.mdx que describe la reproducción de políticas para no afirmar
que se aplican las 39 políticas integradas. Indica que cada evento se reproduce
mediante las políticas de tiempo real aplicables, excluyendo
warn-repeated-tool-calls y las cinco políticas require-*-before-stop, además de
los 8 detectores exclusivos del auditor.
docs/es/introduction.mdx-8-8 (1)

8-8: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Include Goose in the supported-agent list.

The updated configuration, dashboard, and quick-start pages include Goose, but the introduction omits it from the compatibility summary.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/es/introduction.mdx` at line 8, Update the supported-agent list in the
Spanish introduction’s compatibility summary to include Goose, preserving the
existing formatting and all currently listed agents.
docs/es/getting-started.mdx-74-75 (1)

74-75: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the multi-CLI quick-start agent-neutral. Both translations expand installation to twelve CLIs but still tell every user to launch Claude Code.

  • docs/es/getting-started.mdx#L74-L75: refer to the user’s selected agent.
  • docs/pt-br/getting-started.mdx#L74-L75: refer to the user’s selected agent.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/es/getting-started.mdx` around lines 74 - 75, Update the “Ejecutar tu
agente” quick-start step in docs/es/getting-started.mdx (lines 74-75) and its
corresponding step in docs/pt-br/getting-started.mdx (lines 74-75) to instruct
users to launch their selected agent instead of specifically launching Claude
Code; preserve the existing interception, unattended execution, and dashboard
review guidance.
docs/hi/built-in-policies.mdx-739-748 (1)

739-748: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the translated workflow semantics.

Line 742 should say “पुश न किए गए कमिट,” not “अप्रयुक्त कमिट.” Line 784 should explain that UNKNOWN prevents false negatives while GitHub recomputes, not that it prevents recomputation.

Also applies to: 781-786

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/hi/built-in-policies.mdx` around lines 739 - 748, Update the Hindi
descriptions for require-push-before-stop and the referenced UNKNOWN behavior:
replace “अप्रयुक्त कमिट” with “पुश न किए गए कमिट,” and state that UNKNOWN
prevents false negatives while GitHub recomputes, rather than implying it
prevents recomputation. Preserve the surrounding policy semantics and
formatting.
docs/hi/getting-started.mdx-74-75 (1)

74-75: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Finish updating Claude-only guidance for multi-CLI support.

  • docs/hi/getting-started.mdx#L74-L75: tell users to run their selected agent rather than only Claude Code.
  • docs/hi/getting-started.mdx#L169-L175: explain that uninstall removes hooks for the selected/detected CLI integrations.
  • docs/hi/dashboard.mdx#L29-L32: include badges for every CLI listed as a project source.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/hi/getting-started.mdx` around lines 74 - 75, Update
docs/hi/getting-started.mdx lines 74-75 to instruct users to run their selected
agent, not only Claude Code; update lines 169-175 to explain that uninstall
removes hooks for the selected or detected CLI integrations; update
docs/hi/dashboard.mdx lines 29-32 to display badges for every CLI listed as a
project source.
docs/hi/getting-started.mdx-187-189 (1)

187-189: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the stale policy count.

This card says 26 policies, while this PR consistently documents 39.

-  सभी 26 policies parameters के साथ
+  सभी 39 policies parameters के साथ
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/hi/getting-started.mdx` around lines 187 - 189, Update the “Built-in
policies” Card content in getting-started.mdx to state 39 policies instead of
26, keeping the existing Hindi wording and link unchanged.
docs/it/built-in-policies.mdx-49-49 (1)

49-49: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Misplaced - **require-** list item.

The translation pipeline incorrectly pushed the final list item defining the require- policy prefix to the end of the subsequent "Namespaces" paragraph, breaking the Markdown list structure and creating an orphaned bullet point.

  • docs/it/built-in-policies.mdx#L49-L49: Move this line up to line 31 to properly conclude the list.
  • docs/pt-br/built-in-policies.mdx#L54-L54: Move this line up to line 31 to properly conclude the list.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/it/built-in-policies.mdx` at line 49, Move the require- policy list item
from line 49 to line 31 in docs/it/built-in-policies.mdx, preserving it as the
final item in the policy-prefix list before the Namespaces paragraph. Apply the
same move from line 54 to line 31 in docs/pt-br/built-in-policies.mdx; no other
content changes are needed.
docs/it/cli/audit.mdx-55-57 (1)

55-57: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Synchronize the supported-integration lists. Several summaries omit integrations documented elsewhere in this cohort.

  • docs/it/cli/audit.mdx#L55-L57: add the remaining offline audit sources.
  • docs/pt-br/cli/audit.mdx#L57-L57: add the remaining offline audit sources.
  • docs/it/dashboard.mdx#L27-L31: document badges for all integrations listed in the preceding paragraph.
  • docs/it/introduction.mdx#L8-L8: add Goose to the supported-agent list.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/it/cli/audit.mdx` around lines 55 - 57, Synchronize the documented
integration lists across docs/it/cli/audit.mdx lines 55-57 and
docs/pt-br/cli/audit.mdx line 57 by adding the remaining offline audit sources;
update docs/it/dashboard.mdx lines 27-31 to include badges for every integration
named in its preceding paragraph; and update docs/it/introduction.mdx line 8 to
add Goose to the supported-agent list.
docs/it/configuration.mdx-125-125 (1)

125-125: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the convention-policy directory names.

  • docs/it/configuration.mdx#L125-L125: use .failproofai/policies/ and ~/.failproofai/policies/.
  • docs/pt-br/configuration.mdx#L125-L125: use .failproofai/policies/ and ~/.failproofai/policies/.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/it/configuration.mdx` at line 125, Correct the convention-policy
directory names in the documentation sentence: update docs/it/configuration.mdx
lines 125-125 and docs/pt-br/configuration.mdx lines 125-125 to reference
.failproofai/policies/ for project conventions and ~/.failproofai/policies/ for
user conventions.
docs/it/introduction.mdx-53-53 (1)

53-53: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the oferirà typo.

-failproofai policies --install   # abilita le politiche (o salta — `failproofai` ti oferirà di configurarle al primo avvio)
+failproofai policies --install   # abilita le politiche (o salta — `failproofai` ti offrirà di configurarle al primo avvio)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/it/introduction.mdx` at line 53, Correct the typo in the Italian
installation guidance comment for `failproofai policies --install`, changing
`oferirà` to `offrirà`.
docs/ja/getting-started.mdx-188-188 (1)

188-188: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the parameterized-policy count.

This says 26 policies have parameters, while docs/ja/built-in-policies.mdx states that 19 do. Keep the count consistent with the policy catalog.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ja/getting-started.mdx` at line 188, Update the parameterized-policy
count in the getting-started documentation from 26 to 19, matching the policy
catalog’s count in built-in-policies.mdx.
docs/ja/dashboard.mdx-29-32 (1)

29-32: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Complete the CLI badge list.

Line 27 supports twelve CLIs, but this list stops at Hermes. Add OpenClaw, Factory Droid, Devin, Antigravity, and Goose so the documented project-row output is consistent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ja/dashboard.mdx` around lines 29 - 32, Update the CLI badge list in the
project display section of docs/ja/dashboard.mdx to include OpenClaw, Factory
Droid, Devin, Antigravity, and Goose after Hermes, preserving the existing badge
formatting and documented color labels.
docs/ja/built-in-policies.mdx-705-716 (1)

705-716: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the localized Stop-semantics tables. Both tables claim only six supported CLIs while the supplied configuration documentation also identifies working Stop gates for OpenClaw, Factory Droid, Devin, and Antigravity.

  • docs/ja/built-in-policies.mdx#L705-L716: add the four missing integrations or narrow the introductory wording.
  • docs/ko/built-in-policies.mdx#L705-L716: make the equivalent Korean update.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ja/built-in-policies.mdx` around lines 705 - 716, Update the
Stop-semantics tables in docs/ja/built-in-policies.mdx (705-716) and
docs/ko/built-in-policies.mdx (705-716) so they no longer claim only six
supported CLIs: add rows for OpenClaw, Factory Droid, Devin, and Antigravity
using the supplied configuration documentation, or narrow the introductory
wording to match the listed integrations.
docs/ja/getting-started.mdx-175-175 (1)

175-175: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Describe uninstallation for the selected CLI and scope.

policies --uninstall is not limited to ~/.claude/settings.json; the preceding instructions support many CLIs and project/user scopes. Avoid promising a Claude-only removal path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ja/getting-started.mdx` at line 175, Update the uninstallation
instructions near the `policies --uninstall` guidance to describe removal for
the selected CLI and applicable project or user scope, rather than specifying
only `~/.claude/settings.json`. Preserve the instruction that configuration
files under `~/.failproofai/` remain intact.
docs/ru/getting-started.mdx-187-189 (1)

187-189: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Synchronize the policy count across translations. Both cards claim 26 parameterized policies, while the built-in policy documentation states 39 total and 19 parameterized.

  • docs/ru/getting-started.mdx#L187-L189: update the Russian card count and wording.
  • docs/tr/getting-started.mdx#L187-L189: update the Turkish card count and wording.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ru/getting-started.mdx` around lines 187 - 189, The built-in policy
cards use an outdated count and wording. Update docs/ru/getting-started.mdx
lines 187-189 and docs/tr/getting-started.mdx lines 187-189 to state that there
are 39 total policies, including 19 parameterized policies, using accurate
Russian and Turkish wording respectively.
docs/ru/introduction.mdx-8-8 (1)

8-8: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Synchronize the expanded integration lists. Several localized enumerations were not updated after adding the newer CLI integrations.

  • docs/ru/introduction.mdx#L8-L8: add Goose to the supported-agent list.
  • docs/tr/cli/audit.mdx#L50-L50: include the additional offline audit sources, or explicitly document exclusions.
  • docs/tr/dashboard.mdx#L31-L31: add the missing OpenClaw, Factory Droid, Devin, Antigravity, and Goose badges.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ru/introduction.mdx` at line 8, Synchronize the localized integration
lists: update docs/ru/introduction.mdx lines 8-8 to add Goose; update
docs/tr/cli/audit.mdx lines 50-50 to include the additional offline audit
sources or explicitly document their exclusion; and update docs/tr/dashboard.mdx
lines 31-31 to add badges for OpenClaw, Factory Droid, Devin, Antigravity, and
Goose.
docs/ru/getting-started.mdx-175-175 (1)

175-175: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the cross-locale uninstall description. Both translations still describe a Claude-only cleanup despite the expanded multi-CLI installation flow.

  • docs/ru/getting-started.mdx#L175-L175: describe removal from the selected/detected CLI hook or plugin configuration.
  • docs/tr/getting-started.mdx#L175-L175: apply the equivalent Turkish correction.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ru/getting-started.mdx` at line 175, Update the uninstall descriptions
at docs/ru/getting-started.mdx:175-175 and docs/tr/getting-started.mdx:175-175
to describe removing hooks or plugins from the selected or detected CLI’s
configuration, rather than only Claude’s settings; preserve the statement that
~/.failproofai/ configuration files remain.
docs/tr/built-in-policies.mdx-705-716 (1)

705-716: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the Stop-semantics table for all enforcing CLIs.

This says only six CLIs support Stop enforcement, but the configuration page also documents working Stop contracts for OpenClaw, Factory Droid, Devin, and Antigravity. Add those integrations and their retry mechanisms to avoid understating workflow-policy coverage.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tr/built-in-policies.mdx` around lines 705 - 716, Update the “CLI başına
Stop semantiği” table to include OpenClaw, Factory Droid, Devin, and Antigravity
alongside the existing enforcing CLIs. For each integration, document when the
gate triggers and the user-visible retry or continuation mechanism, using the
corresponding documented Stop contract; revise the introductory wording and
total count so they no longer claim only six CLIs are supported.
docs/ru/dashboard.mdx-29-32 (1)

29-32: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Synchronize the badge lists with the expanded CLI catalog. Both localized dashboard pages enumerate twelve project sources but describe badges only through Hermes.

  • docs/ru/dashboard.mdx#L29-L32: add badges for OpenClaw, Factory Droid, Devin, Antigravity, and Goose.
  • docs/vi/dashboard.mdx#L29-L32: add badges for OpenClaw, Factory Droid, Devin, Antigravity, and Goose.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ru/dashboard.mdx` around lines 29 - 32, Update the project badge list in
docs/ru/dashboard.mdx lines 29-32 and docs/vi/dashboard.mdx lines 29-32 to
include OpenClaw, Factory Droid, Devin, Antigravity, and Goose alongside the
existing CLI sources, preserving each page’s localized wording and badge color
descriptions.
docs/vi/dashboard.mdx-62-62 (1)

62-62: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Replace the mistranslated bốn phần dưới nấu.

This phrase is not meaningful Vietnamese. Use wording such as một áp phích toàn màn hình có thể chia sẻ, theo sau là bốn phần bên dưới.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/vi/dashboard.mdx` at line 62, Replace the mistranslated phrase “bốn phần
dưới nấu” in the dashboard description with clear Vietnamese wording meaning “a
shareable full-screen poster followed by four sections below,” while preserving
the rest of the description.
docs/vi/getting-started.mdx-83-89 (1)

83-89: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Remove the stale Claude-only assumptions.

The page installs hooks for twelve CLIs, but the flow says Claude Code always invokes the subprocess and uninstall says only ~/.claude/settings.json is modified. Generalize the diagram and explain that uninstall removes hooks from the selected/detected CLI integrations while preserving failproofai configuration.

Also applies to: 175-175

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/vi/getting-started.mdx` around lines 83 - 89, Generalize the hook
execution diagram in the getting-started documentation so it applies to all
selected or detected CLI integrations rather than assuming Claude Code and
failproofai alone. Update the uninstall text around the referenced section to
state that hooks are removed from the selected/detected CLI configuration files
while failproofai configuration is preserved.
docs/ru/dashboard.mdx-62-62 (1)

62-62: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the malformed Russian audit description.

единую экранную общедоступный постер has conflicting cases and is difficult to understand. Consider: “полноэкранный общедоступный постер и четыре раздела ниже”.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ru/dashboard.mdx` at line 62, Update the Russian audit description in
the documented dashboard text by replacing the malformed phrase “единую экранную
общедоступный постер” with grammatically correct wording equivalent to
“полноэкранный общедоступный постер и четыре раздела ниже,” while preserving the
surrounding meaning.
docs/tr/introduction.mdx-57-57 (1)

57-57: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the Turkish guidance sentence.

Tam açıklamayı için is ungrammatical; use Tam açıklama için.

Proposed fix
-Tam açıklamayı için [Başlangıç](/tr/getting-started) kılavuzuna bakın.
+Tam açıklama için [Başlangıç](/tr/getting-started) kılavuzuna bakın.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tr/introduction.mdx` at line 57, In the Turkish guidance sentence in the
introduction document, replace “Tam açıklamayı için” with the grammatically
correct “Tam açıklama için” while preserving the existing link and sentence
structure.
docs/vi/introduction.mdx-53-54 (1)

53-54: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Localize the quick-start comments.

These comments remain in English while the surrounding page is Vietnamese.

Proposed fix
-failproofai policies --install   # enable policies (or skip — `failproofai` will offer to set them up on first run)
-failproofai                      # launch the dashboard
+failproofai policies --install   # bật chính sách (hoặc bỏ qua — `failproofai` sẽ đề nghị thiết lập ở lần chạy đầu tiên)
+failproofai                      # khởi chạy bảng điều khiển
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/vi/introduction.mdx` around lines 53 - 54, Translate the inline
quick-start comments beside the `failproofai policies --install` and
`failproofai` commands into Vietnamese, matching the surrounding
`docs/vi/introduction.mdx` content while preserving the commands and their
meaning.
docs/vi/getting-started.mdx-187-189 (1)

187-189: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the stale built-in policy count.

The card says 26 policies, while the updated introduction and policy catalog document 39.

-  Tất cả 26 chính sách với các tham số
+  Tất cả 39 chính sách với các tham số
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/vi/getting-started.mdx` around lines 187 - 189, Update the policy count
in the “Chính sách tích hợp” Card to 39, keeping the existing title, icon, href,
and surrounding text unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ffdc16c1-6561-4297-a486-9dafedddd7e5

📥 Commits

Reviewing files that changed from the base of the PR and between 6638796 and 4ecd054.

📒 Files selected for processing (111)
  • .github/workflows/translate-docs.yml
  • __tests__/scripts/translate-docs/config.test.ts
  • __tests__/scripts/translate-docs/mintlify-nav.test.ts
  • docs/ar/built-in-policies.mdx
  • docs/ar/cli/audit.mdx
  • docs/ar/configuration.mdx
  • docs/ar/dashboard.mdx
  • docs/ar/getting-started.mdx
  • docs/ar/introduction.mdx
  • docs/built-in-policies.mdx
  • docs/cli/audit.mdx
  • docs/configuration.mdx
  • docs/dashboard.mdx
  • docs/de/built-in-policies.mdx
  • docs/de/cli/audit.mdx
  • docs/de/configuration.mdx
  • docs/de/dashboard.mdx
  • docs/de/getting-started.mdx
  • docs/de/introduction.mdx
  • docs/es/built-in-policies.mdx
  • docs/es/cli/audit.mdx
  • docs/es/configuration.mdx
  • docs/es/dashboard.mdx
  • docs/es/getting-started.mdx
  • docs/es/introduction.mdx
  • docs/fr/built-in-policies.mdx
  • docs/fr/cli/audit.mdx
  • docs/fr/configuration.mdx
  • docs/fr/dashboard.mdx
  • docs/fr/getting-started.mdx
  • docs/fr/introduction.mdx
  • docs/getting-started.mdx
  • docs/he/built-in-policies.mdx
  • docs/he/cli/audit.mdx
  • docs/he/configuration.mdx
  • docs/he/dashboard.mdx
  • docs/he/getting-started.mdx
  • docs/he/introduction.mdx
  • docs/hi/built-in-policies.mdx
  • docs/hi/cli/audit.mdx
  • docs/hi/configuration.mdx
  • docs/hi/dashboard.mdx
  • docs/hi/getting-started.mdx
  • docs/hi/introduction.mdx
  • docs/i18n/README.ar.md
  • docs/i18n/README.de.md
  • docs/i18n/README.es.md
  • docs/i18n/README.fr.md
  • docs/i18n/README.he.md
  • docs/i18n/README.hi.md
  • docs/i18n/README.it.md
  • docs/i18n/README.ja.md
  • docs/i18n/README.ko.md
  • docs/i18n/README.pt-br.md
  • docs/i18n/README.ru.md
  • docs/i18n/README.tr.md
  • docs/i18n/README.vi.md
  • docs/i18n/README.zh.md
  • docs/introduction.mdx
  • docs/it/built-in-policies.mdx
  • docs/it/cli/audit.mdx
  • docs/it/configuration.mdx
  • docs/it/dashboard.mdx
  • docs/it/getting-started.mdx
  • docs/it/introduction.mdx
  • docs/ja/built-in-policies.mdx
  • docs/ja/cli/audit.mdx
  • docs/ja/configuration.mdx
  • docs/ja/dashboard.mdx
  • docs/ja/getting-started.mdx
  • docs/ja/introduction.mdx
  • docs/ko/built-in-policies.mdx
  • docs/ko/cli/audit.mdx
  • docs/ko/configuration.mdx
  • docs/ko/dashboard.mdx
  • docs/ko/getting-started.mdx
  • docs/ko/introduction.mdx
  • docs/pt-br/built-in-policies.mdx
  • docs/pt-br/cli/audit.mdx
  • docs/pt-br/configuration.mdx
  • docs/pt-br/dashboard.mdx
  • docs/pt-br/getting-started.mdx
  • docs/pt-br/introduction.mdx
  • docs/ru/built-in-policies.mdx
  • docs/ru/cli/audit.mdx
  • docs/ru/configuration.mdx
  • docs/ru/dashboard.mdx
  • docs/ru/getting-started.mdx
  • docs/ru/introduction.mdx
  • docs/styles/config/vocabularies/Mintlify/accept.txt
  • docs/tr/built-in-policies.mdx
  • docs/tr/cli/audit.mdx
  • docs/tr/configuration.mdx
  • docs/tr/dashboard.mdx
  • docs/tr/getting-started.mdx
  • docs/tr/introduction.mdx
  • docs/vi/built-in-policies.mdx
  • docs/vi/cli/audit.mdx
  • docs/vi/configuration.mdx
  • docs/vi/dashboard.mdx
  • docs/vi/getting-started.mdx
  • docs/vi/introduction.mdx
  • docs/zh/built-in-policies.mdx
  • docs/zh/cli/audit.mdx
  • docs/zh/configuration.mdx
  • docs/zh/dashboard.mdx
  • docs/zh/getting-started.mdx
  • docs/zh/introduction.mdx
  • scripts/translate-docs/config.ts
  • scripts/translate-docs/mintlify-nav.ts
  • scripts/translate-docs/types.ts
💤 Files with no reviewable changes (1)
  • docs/styles/config/vocabularies/Mintlify/accept.txt
🚧 Files skipped from review as they are similar to previous changes (4)
  • tests/scripts/translate-docs/config.test.ts
  • scripts/translate-docs/mintlify-nav.ts
  • tests/scripts/translate-docs/mintlify-nav.test.ts
  • scripts/translate-docs/config.ts

Comment thread .github/workflows/translate-docs.yml
Comment thread .github/workflows/translate-docs.yml
Comment thread docs/dashboard.mdx
Comment thread docs/fr/dashboard.mdx Outdated
Comment thread docs/hi/dashboard.mdx Outdated
Comment thread docs/it/dashboard.mdx Outdated
Comment thread docs/ja/built-in-policies.mdx Outdated
Comment thread docs/ja/introduction.mdx Outdated
Comment thread docs/ru/built-in-policies.mdx Outdated
Comment thread docs/zh/built-in-policies.mdx Outdated
@hermes-exosphere

Copy link
Copy Markdown
Contributor

Hermes Code Review — Re-Review Phase 4

New commit detected: 4ecd054 (translation updates + English source doc changes).

Analyzing 106 translation files + English source changes. Running full test suite now.
Review covering: existing threads, regression check, new code analysis, build verification.

@hermes-exosphere

Copy link
Copy Markdown
Contributor

🔴 CRITICAL: docs.json pt-BR locale regressed in commit 4ecd054

In commit 4ecd054 (docs: update translations for changed English sources), the docs.json file was regenerated during the translation update and the Mintlify canonical pt-BR locale was reverted back to pt-br.

Evidence:

  • git show da39629 -- docs/docs.json shows "language": "pt-BR" (correct, generated by mintlifyCode fix)
  • git show HEAD -- docs/docs.json shows "language": "pt-br" (regressed)

Root cause: The CI translation pipeline regenerated docs.json via bun scripts/translate-docs/cli.ts --update-nav. The script code at HEAD correctly uses getLanguageByCode(lang)?.mintlifyCode ?? lang, but the regenerated output has pt-br. This suggests either:

  1. The CI ran the script on main (before the mintlifyCode fix was merged there), or
  2. The --update-nav flag doesn't use buildLanguageNav from mintlify-nav.ts but has a different code path

Fix:

  • Option A: Re-run bun scripts/translate-docs/cli.ts --update-nav after this PR merges to regenerate with correct pt-BR
  • Option B: Manually revert the two pt-brpt-BR lines in docs.json in this PR (lines 347, 1278)
  • Option C: Fix the --update-nav code path if it bypasses buildLanguageNav

Severity: This breaks the Mintlify locale fix that this PR is designed to deliver. Without pt-BR in docs.json, Mintlify won't recognize the Portuguese locale correctly.

@hermes-exosphere

Copy link
Copy Markdown
Contributor

Hermes Code Review — Re-Review: Build and Test Complete

Check Result
TypeScript (tsc --noEmit) ✅ 0 errors
ESLint (changed test files) ✅ 0 errors
Unit Tests 1,954 passed / 0 failed (109 test files)
Translation Config Tests ✅ 19/19 passed (including mintlifyCode test)
Translation Nav Tests ✅ 15/15 passed (including pt-BR locale test)
MDX Translator Tests ✅ 27/27 passed
Cache Tests ✅ 10/10 passed
README Translator Tests ✅ 5/5 passed

Re-review scope: New commit 4ecd054 adds 106 translation file updates (+5521/-4983) and English source doc changes. One CRITICAL finding identified (see inline comment).

@hermes-exosphere

Copy link
Copy Markdown
Contributor

🔍 Automated Code Review — Hermes Agent (Re-Review)

📋 Executive Summary

This PR fixes Portuguese locale handling for Mintlify, restores the AgentEye language selector, and makes the CI translation pipeline more robust. The re-review covers a new commit 4ecd054 that updates translations across 106 files for changed English source docs (removing Gemini CLI references, adding 5 new supported CLIs). The code architecture is sound, all 1,954 tests pass, but a critical regression was found: the docs.json pt-BR locale that was fixed in prior commits was reverted by the CI-generated translation update commit.


📊 Change Architecture

graph TD
    A["English Source Docs
(7 files updated)"] -->|"trigger"| B["CI Translation Pipeline"] B -->|"translate + update-nav"| C["106 Translation Files
(all 14 langs + i18n READMEs)"] D["config.ts
+mintlifyCode field"] --> E["mintlify-nav.ts
buildLanguageNav uses mintlifyCode"] E --> F["docs.json
navigation generation"] G["translate-docs.yml
workflow hardening"] -->|"validate"| F G -->|"--ignore-scripts"| H["Faster CI
no Next.js build per lang"] G -->|"success only"| I["Atomic publishing
no partial translations"] F -->|"REGRESSION: pt-BR reverted to pt-br"| J["🔴 Mintlify locale broken"] style D fill:#87CEEB style E fill:#87CEEB style G fill:#87CEEB style C fill:#90EE90 style J fill:#FF4444

Legend: 🟢 New | 🔵 Modified | 🔴 Critical Regression


🔴 Breaking Changes

✅ No breaking API or schema changes detected. The mintlifyCode field is optional and backward-compatible. English doc changes are additive (new CLI references, removed Gemini). However, the docs.json locale regression is a functional break — see critical finding below.


⚠️ Issues Found

  1. 🔴 Criticaldocs/docs.json:347 (and line 1278) — pt-BR locale reverted to pt-br. Commit 4ecd054 regenerated docs.json during CI translation update and changed the Mintlify canonical "language": "pt-BR" (set correctly by da39629) back to "language": "pt-br". The buildLanguageNav code at HEAD correctly uses getLanguageByCode(lang)?.mintlifyCode ?? lang (mintlify-nav.ts line 109), but the CI pipeline regenerated the file from main branch code which doesn't have this fix. Fix: Re-run --update-nav after this PR merges, or manually revert the two pt-brpt-BR values in this PR.

  2. 🟡 Existing (unresolved).github/workflows/translate-docs.yml:140 — Mintlify CLI installed globally without version pin. Non-blocking but best practice for CI determinism. Previous reviews flagged this twice; still applies in the current diff.

  3. 🔵 Info — The new commits add references to 5 new CLIs (OpenClaw, Factory, Devin, Antigravity, Goose) in configuration.mdx, dashboard.mdx, built-in-policies.mdx, getting-started.mdx. CodeRabbit flagged that lib/cli-registry.ts doesn't include these new CLIs. Verify whether the CLI registry needs updating to match docs.


🔬 Logical / Bug Analysis

Translation update commit (4ecd054):

  • The English source docs changed 6 files: built-in-policies.mdx, cli/audit.mdx, configuration.mdx, dashboard.mdx, getting-started.mdx, introduction.mdx
  • Gemini CLI references were systematically removed (was listed as "beta" support — appears to have been deprecated)
  • 5 new CLIs added: OpenClaw, Factory/Droid, Devin, Antigravity/agy, Goose
  • All 14 language translations + i18n READMEs were regenerated to match
  • One vocab file line removed (.github/styles/config/vocabularies/Mintlify/accept.txt)
  • docs.json was regenerated (with the locale regression)

Code quality of the fix (prior commits):

  • getLanguageByCode(lang)?.mintlifyCode ?? lang uses optional chaining + nullish coalescing — correctly handles: missing config, missing language, and missing mintlifyCode field
  • buildLanguageNav is the single source of truth for locale mapping — no duplication
  • Test coverage: config test (mintlifyCode exists), nav test (pt-BR emitted while paths use pt-br/), edge case covered (unknown code returns undefined)

CI workflow hardening (prior commits):

  • --ignore-scripts on bun install avoids building Next.js per language (correct optimization)
  • consolidate job changed from always() to == 'success' — ensures no partial publishes (correct atomicity)
  • New Mintlify validate and MDX validate:mdx steps added — good quality gates
  • continue-on-error: true removed from artifact download — ensures all translations are present

🧪 Evidence — Build & Test Results

Full Test Results
✓ Test Files  109 passed (109)
✓ Tests      1,954 passed (1,954)
✓ TypeScript: 0 errors
✓ ESLint:    0 errors (changed test files)
✓ Config Tests: 19/19 (mintlifyCode test passes)
✓ Nav Tests: 15/15 (pt-BR locale test passes)
Incremental Diff (da396294ecd054)
106 files changed, 5521 insertions(+), 4983 deletions(-)

All changes are translation content updates + English source doc updates:

  • 6 English source docs: Gemini removal + new CLIs
  • 84 translated .mdx files (6 pages × 14 languages)
  • 14 i18n READMEs
  • 1 docs.json (two pt-BR → pt-br reversions)
  • 1 vocab file

🔗 Issue Linkage

This PR supersedes #511. No linked issue number found. ⚠️ Consider creating an issue for better traceability of the Mintlify locale fix.


👥 Human Review Feedback

No human review comments on this PR. All review feedback is from bots:

  • @coderabbitai: 1 nitpick (Mintlify pinning), 10 additional comments on 2nd review (privacy claims, CLI registry, MDX anchors)
  • @hermes-exosphere: 3 threads (2 Mintlify pinning — unresolved, 1 test suggestion — resolved)

💡 Suggestions

  • Verify CLI registry completeness: The docs now reference 11 CLIs (adding OpenClaw, Factory/Droid, Devin, Antigravity, Goose, removing Gemini). Confirm lib/cli-registry.ts matches this list.
  • Fix docs.json before merge: Either manually revert the two pt-brpt-BR entries or ensure the post-merge CI run regenerates correctly.
  • Consider pinning Mintlify CLI: Multiple reviewers have flagged this. Low effort, high ROI for CI determinism.

🏆 Verdict

VERDICT: CHANGES_REQUESTED

The code architecture is solid and tests pass, but the docs.json locale regression in commit 4ecd054 breaks the primary feature this PR is designed to deliver (Mintlify canonical pt-BR locale). This must be fixed before merge.


Automated code review · 2026-07-15 12:37:00 UTC

@hermes-exosphere hermes-exosphere left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review found 1 critical issue: docs.json pt-BR locale regression in commit 4ecd054. See the summary comment and critical issue comment for full details. 1,954 tests pass, code quality is good, but the regression must be fixed before merge. 🔴

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "=== Checking docs.json for pt-br/pt-BR language entries ==="
fd docs.json --max-depth 2
grep -n '"language"' docs/docs.json | grep -i 'pt-b' || true
echo "---"
grep -n '"pt-b' docs/docs.json | head -50
echo "=== Checking mintlify-nav.ts current implementation ==="
sed -n '1,140p' scripts/translate-docs/mintlify-nav.ts
echo "=== Checking config.ts for pt-br entry ==="
grep -n -A5 '"pt-br"' scripts/translate-docs/config.ts
echo "=== git log for docs.json ==="
git log --oneline -- docs/docs.json | head -10

Length of output: 8138


🏁 Script executed:

#!/bin/bash
set -euo pipefail
git show da39629:docs/docs.json | grep -n '"language": "pt-' || true
echo "---5e43775---"
git show 5e43775:docs/docs.json | grep -n '"language": "pt-' || true
echo "---4ecd054 parent---"
git show 4ecd054^:docs/docs.json | grep -n '"language": "pt-' || true
echo "---4ecd054---"
git show 4ecd054:docs/docs.json | grep -n '"language": "pt-' || true
echo "=== check what 4ecd054 diff touched for docs.json ==="
git show 4ecd054 -- docs/docs.json | head -80

Length of output: 1786


🏁 Script executed:

# Inspect the translate-docs workflow to see which ref/branch it checks out
# when it regenerates docs.json, and whether it could have run against a
# stale main branch before the mintlifyCode fix was merged.
cat .github/workflows/translate-docs.yml

Length of output: 10023


@hermes-exosphere Confirmed — this is a real regression, and I tracked down the root cause.

Verification:

da39629, 5e43775, 4ecd054^  → "language": "pt-BR"  (correct, lines 347 & 1278)
4ecd054                     → "language": "pt-br"  (regressed)

The diff in 4ecd054 touches exactly those two lines, changing pt-BR back to pt-br.

Root cause: Looking at .github/workflows/translate-docs.yml, the consolidate job checks out the repo with actions/checkout@v7.0.0 (default ref = the triggering ref) and then regenerates navigation via bun scripts/translate-docs/cli.ts --update-nav. The workflow's "update existing PR" logic pushes its regenerated docs.json directly onto an open [auto] update translations PR branch (the 4ecd054 commit message — docs: update translations for changed English sources — matches that flow exactly).

Since this PR's mintlifyCode fix hasn't been merged into main yet, the workflow run that produced 4ecd054 executed the pre-fix version of buildLanguageNav (plain ${lang} instead of getLanguageByCode(lang)?.mintlifyCode ?? lang), regenerated docs.json with pt-br, and pushed it onto this PR's branch — silently overwriting the earlier fix. It's not a defect in the code added by this PR; it's a timing/ordering issue between an in-flight auto-translation run and this unmerged fix.

Fix for this PR: manually restore the two lines so the branch ships the correct locale now, independent of when main catches up:

--- a/docs/docs.json
+++ b/docs/docs.json
@@ -344,7 +344,7 @@
           {
-            "language": "pt-br",
+            "language": "pt-BR",
             "tabs": [
...
@@ -1275,7 +1275,7 @@
           {
-            "language": "pt-br",
+            "language": "pt-BR",
             "tabs": [

No recurrence risk after merge: once this PR merges into main, future auto-translation runs will use the fixed buildLanguageNav, so docs.json will regenerate with pt-BR correctly going forward.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@hermes-exosphere

Copy link
Copy Markdown
Contributor

Automated code review started - full review. Results will be posted here.

@hermes-exosphere

Copy link
Copy Markdown
Contributor

Hermes Code Review — Phase 3: Build and Verification

Running full test suite and analyzing 20 changed files...

@hermes-exosphere hermes-exosphere left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inline suggestions from Hermes review.

Comment thread scripts/translate-docs/mintlify-nav.ts
Comment thread .github/workflows/translate-docs.yml
Comment thread .github/workflows/translate-docs.yml
Comment thread .github/workflows/translate-docs.yml
Comment thread .github/workflows/translate-docs.yml
Comment thread docs/introduction.mdx
Comment thread docs/dashboard.mdx
Comment thread scripts/translate-docs/config.ts
@hermes-exosphere

Copy link
Copy Markdown
Contributor

🔍 Automated Code Review — Hermes Agent

📋 Executive Summary

This PR hardens the automated translation pipeline by making publishing atomic, pins the Mintlify validator, emits the canonical pt-BR locale (while preserving pt-br/ paths), and qualifies privacy claims across all localized docs. Code quality is high — well-tested, well-commented, and focused on exactly the stated goals. No blocking issues found.


📊 Change Architecture

graph TD
    A["scripts/translate-docs/config.ts<br/>➕ mintlifyCode field"] -->|"pt-BR canonical"| B["scripts/translate-docs/mintlify-nav.ts<br/>🔧 buildLanguageNav lookup"]
    B --> C["docs/docs.json<br/>🔧 pt-br → pt-BR"]
    A --> D["scripts/translate-docs/types.ts<br/>➕ LanguageConfig.mintlifyCode?"]
    
    E[".github/workflows/translate-docs.yml<br/>🔧 7 changes"] -->|"if-no-files-found: error"| F["Artifact safety"]
    E -->|"consolidate: success only"| F
    E -->|"mintlify@4.2.680"| G["Mintlify pinned"]
    E -->|"--ignore-scripts"| H["CI perf: 14x faster install"]
    E -->|"post-overlay revalidation"| I["Commit-tree integrity"]
    
    J["docs/*/dashboard.mdx<br/>docs/*/introduction.mdx<br/>docs/*/cli/audit.mdx"] -->|"qualified privacy claims"| K["All 10 locales"]
    
    L["__tests__/.../config.test.ts<br/>__tests__/.../mintlify-nav.test.ts"] -->|"+2 new tests"| M["Regression coverage"]
Loading

Legend: 🟢 New | 🔵 Modified | 🟡 Breaking Change Risk | ⚪ No functional change


🔴 Breaking Changes

✅ No breaking changes detected. All changes are additive or qualified:

  • New mintlifyCode field is optional (?) — backward compatible
  • buildLanguageNav fallback (?? lang) preserves behaviour for non-pt-br languages
  • CI changes only affect the translation workflow, not user-facing behaviour

⚠️ Issues Found

No critical or warning-level issues found. 8 inline suggestions posted:

  1. 💡 scripts/translate-docs/mintlify-nav.ts:108 — O(n) lookup note (non-blocking)
  2. .github/workflows/translate-docs.yml:92if-no-files-found: error good
  3. .github/workflows/translate-docs.yml:107 — Strict success guard good
  4. .github/workflows/translate-docs.yml:140 — Mintlify pinned to 4.2.680
  5. 💡 .github/workflows/translate-docs.yml:72--ignore-scripts perf win
  6. docs/introduction.mdx:14 — Privacy qualifier in English intro
  7. docs/dashboard.mdx:19 — Privacy qualifier in dashboard
  8. 💡 scripts/translate-docs/config.ts:13 — Formatting note

🔬 Logical / Bug Analysis

pt-BR locale handling (core fix):

  • types.ts: Added optional mintlifyCode?: string to LanguageConfig — clean, extensible
  • config.ts: Only Portuguese gets mintlifyCode: "pt-BR" — all other languages use the default (code === mintlifyCode)
  • mintlify-nav.ts:108: getLanguageByCode(lang)?.mintlifyCode ?? lang — elegant fallback; if getLanguageByCode returns undefined (shouldn't happen for valid codes), falls back to raw code
  • docs.json: Two occurrences of "language": "pt-br" changed to "language": "pt-BR" — correct
  • Tests verify both the canonical locale output AND the preservation of pt-br/ paths

CI hardening:

  • Combined if-no-files-found: error + needs.translate.result == 'success' creates proper atomic publishing — a failed/broken language cannot silently leave stale locale content
  • Mintlify pinning to 4.2.680 resolves the long-standing nit from previous reviews
  • Post-overlay revalidation (lines 248-249) closes the gap where an existing PR branch could carry files that bypass validation
  • --ignore-scripts on bun install avoids the full Next.js build per matrix job — 14x faster

Privacy qualifiers:

  • All localized dashboard/introduction/audit pages now properly distinguish between local-only data processing and optional authenticated features
  • Portuguese (pt-br), Hindi (hi), Italian (it), Japanese (ja), French (fr) all updated consistently
  • English source also updated

Non-functional reformatting:

  • config.ts language objects reformatted from single-line to multi-line — no behaviour change, just consistency
  • Some doc files got trailing newline fixes (removed \n at EOF that was missing)

🧪 Evidence — Build & Test Results

Install (bun install --frozen-lockfile):  ✅ 558 packages

TypeScript (tsc --noEmit):               ✅ 0 errors

Unit Tests:                               ✅ 2,018 passed / 0 failed (117 files)

Translation Config Tests (19 tests):      ✅ 19/19 passed
  - "uses Mintlify's canonical locale..."  ✅ NEW TEST

Translation Nav Tests (15 tests):          ✅ 15/15 passed
  - "uses Mintlify's canonical..."        ✅ NEW TEST

Pipeline Tests (76 total):                ✅ 76/76 passed

🔗 Issue Linkage

⚠️ No linked issue found. Consider creating one for better traceability — the PR title references [failproofai-511] which suggests an issue exists but wasn't linked.


👥 Human Review Feedback

No human review comments on this PR. All 13 existing review threads (from hermes-exosphere and coderabbitai[bot]) are already resolved:

  • 3 bot nits about Mintlify version pinning → ✅ Addressed (pinned to 4.2.680)
  • 1 bot nit about pt-BR test → ✅ Addressed (test updated)
  • 5 coderabbit privacy concerns → ✅ Addressed (all localized docs qualified)
  • 2 coderabbit CI integrity concerns → ✅ Addressed (atomic publishing)
  • 1 coderabbit Japanese heading anchors → ✅ Already addressed
  • 1 coderabbit Russian/Chinese translation accuracy → ✅ Already addressed

💡 Suggestions

  • Consider extracting the new mintlifyCode logic into a helper getMintlifyLocale(code) instead of inlining in buildLanguageNav — this would make it reusable if other parts of the pipeline need it.
  • The consolidate job now has needs: [prepare, translate] which is correct, but prepare is lightweight — consider whether this could be a single step in translate to reduce job nesting.
  • The post-overlay validation block (lines 248-249) duplicates lines 144 and 147 — consider extracting a reusable validation step composite action.

🏆 Verdict

VERDICT: APPROVED


Automated code review · 2026-07-15 08:21:44 UTC

@hermes-exosphere hermes-exosphere left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hermes Agent Automated Review: APPROVED ✅

Summary: 20 files changed, 137 insertions, 52 deletions. The PR hardens the translation pipeline (atomic publishing, Mintlify pinning), fixes the pt-BR Mintlify locale, and qualifies privacy claims across all localized docs.

Evidence:

  • TypeScript: 0 errors
  • 2,018 tests passed (0 failures)
  • 76 translation pipeline tests passed
  • Both new regression tests pass (pt-BR canonical locale + config mintlifyCode)

All 13 previous review threads resolved. No blocking issues found.

See review summary comment for full analysis.

@NiveditJain NiveditJain dismissed hermes-exosphere’s stale review July 15, 2026 08:23

The merge-base changed after approval.

@hermes-exosphere hermes-exosphere left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hermes Agent Automated Review: APPROVED ✅

Summary: 20 files changed, 137 insertions, 52 deletions. The PR hardens the translation pipeline (atomic publishing, Mintlify pinning), fixes the pt-BR Mintlify locale, and qualifies privacy claims across all localized docs.

Evidence:

  • TypeScript: 0 errors
  • 2,018 tests passed (0 failures)
  • 76 translation pipeline tests passed
  • Both new regression tests pass

All 13 previous review threads resolved. No critical bugs, no security issues, no breaking changes.

Verdict: APPROVED

See review summary for full analysis and mermaid architecture diagram.

@NiveditJain NiveditJain dismissed hermes-exosphere’s stale review July 15, 2026 08:43

The merge-base changed after approval.

@hermes-exosphere hermes-exosphere left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hermes Agent Review: APPROVED ✅

Approving after the final review iteration. All concerns addressed, tests pass.

@NiveditJain NiveditJain dismissed hermes-exosphere’s stale review July 15, 2026 08:49

The merge-base changed after approval.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants