Conversation
…ine bumps Gemini CLI v0.40 (PR google-gemini/gemini-cli#25601) split the combined experimental.memoryManager flag. Pre-v0.40 it gated both the Memory Manager subagent AND background skill extraction + /memory inbox. Post-v0.40 memoryManager keeps only the subagent; extraction and the inbox move to a new experimental.autoMemory flag. Users who carry forward only memoryManager: true lose the inbox silently - exactly the "almost right" failure mode agnix exists to catch. GM-010 (MEDIUM, SHOULD, v0.40+) warns whenever .gemini/settings.json has experimental.memoryManager: true without experimental.autoMemory: true. No autofix - upstream explicitly declined a migration shim because some users may legitimately want only the subagent. No version gate in the validator: setting both flags is always safe (older Gemini ignores unknown experimental keys), so the rule fires unconditionally. Also bumps tool-release baselines for four agnix-irrelevant releases flagged by the tool-release-watch auto-triage: - Claude Code v2.1.121 -> v2.1.123 (closes #842): OAuth 401 retry-loop fix under CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1. No config surface. - Cursor 3.2.11 -> 3.2.16 (closes #843): 3.2 line is Multitask, Worktrees, and Multi-root Workspaces - agent-window UX already on Cursor's explicit irrelevant list. No documented .code-workspace surface yet. - OpenCode v1.14.28 -> v1.14.29 (closes #845): only validator-adjacent line ("opencode agent create writes valid permissions.deny") is already enforced by OC-008. - Gemini CLI v0.39.1 -> v0.40.0 (closes #844): memoryManager split handled by GM-010 above; everything else (provider plumbing, sandbox UX, UI polish) is on Gemini's irrelevant list. Bookkeeping: 415 -> 416 rules via scripts/sync-rule-bookkeeping.js. RESEARCH-TRACKING.md Last Reviewed stamps bumped to 2026-04-29 for the four affected tools. Tests: 6 unit tests on the validator (memoryManager-only fires, autoMemory-explicit-false fires, both-true silent, memoryManager-false silent, autoMemory-only silent, disabled-by-config silent) + 3 schema tests on the experimental-flags parser. Full workspace suite stays green (3633 in agnix-core). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new Gemini CLI settings rule (GM-010) to detect the v0.40 experimental.memoryManager / experimental.autoMemory behavior split, and updates associated rule bookkeeping, docs, locales, and tool-release baselines.
Changes:
- Implement GM-010 in
agnix-coreby parsingexperimental.*flags from.gemini/settings.jsonand emitting a warning whenmemoryManager: trueis set withoutautoMemory: true. - Register GM-010 across the rule source-of-truth and mirrors (knowledge base,
agnix-rules, website generated docs) and add locale strings (root + per-crate). - Bump tool-release baselines and update research tracking “Last Reviewed” stamps.
Reviewed changes
Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| website/src/data/siteData.json | Updates website rule-count metadata to 416. |
| website/docs/rules/index.md | Updates rules index count and adds GM-010 entry. |
| website/docs/rules/generated/gm-010.md | Adds generated documentation page for GM-010. |
| skills/agnix/SKILL.md | Updates skill description to reflect 416 rules. |
| plugin/skills/agnix/SKILL.md | Updates plugin skill description to reflect 416 rules. |
| plugin/commands/agnix.md | Updates command metadata to reflect 416 rules. |
| plugin/.claude-plugin/plugin.json | Updates plugin description to reflect 416 rules. |
| locales/zh-CN.yml | Adds root locale strings for GM-010. |
| locales/es.yml | Adds root locale strings for GM-010. |
| locales/en.yml | Adds root locale strings for GM-010. |
| knowledge-base/rules.json | Adds GM-010 rule metadata; bumps totals/last_updated. |
| knowledge-base/VALIDATION-RULES.md | Adds human-readable GM-010 entry; updates footer stats. |
| knowledge-base/RESEARCH-TRACKING.md | Bumps last-updated + “Last Reviewed” dates for affected tools. |
| knowledge-base/README.md | Updates rule-count reference to 416. |
| knowledge-base/INDEX.md | Updates rule-count references to 416. |
| crates/agnix-rules/rules.json | Mirrors the new GM-010 rule + updated totals. |
| crates/agnix-core/src/schemas/gemini_settings.rs | Adds typed parsing for experimental.memoryManager and experimental.autoMemory. |
| crates/agnix-core/src/rules/gemini_settings.rs | Implements GM-010 validation + adds unit tests. |
| crates/agnix-core/locales/zh-CN.yml | Adds per-crate locale strings for GM-010. |
| crates/agnix-core/locales/es.yml | Adds per-crate locale strings for GM-010. |
| crates/agnix-core/locales/en.yml | Adds per-crate locale strings for GM-010. |
| README.md | Updates rule-count marketing copy to 416. |
| CLAUDE.md | Updates rule-count references to 416 (must mirror AGENTS.md). |
| AGENTS.md | Mirrors CLAUDE.md updates (byte-for-byte parity requirement). |
| .github/tool-release-baselines.json | Bumps last_known_version for claude-code/cursor/gemini-cli/opencode and updates last_updated. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Code Review
This pull request updates several tool release baselines and introduces validation rule GM-010 for the Gemini CLI, which requires experimental.autoMemory to be enabled alongside experimental.memoryManager following the version 0.40 flag split. The changes include core validator logic, schema updates, localization, and extensive documentation across the knowledge base and website. Feedback recommends ordering rule implementations numerically for better maintainability and identifies a potential bug where the line-finding helper may incorrectly match keys within comments.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The previous commit's CHANGELOG entry had hallucinated versions (cursor v0.44.10, gemini-cli v0.40.2, opencode v1.14.30). The actual baselines in .github/tool-release-baselines.json are cursor 3.2.16, gemini-cli v0.40.0, opencode v1.14.29. Restored correctness and added one-line triage reasons per tool for future changelog readers. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Addresses all review feedback from Copilot and Gemini Code Assist: 1. Fix misleading doc comments in GeminiSettingsSchema about unknown flags being "preserved in raw JSON" - they are actually dropped from the typed result and not accessible. Update both the struct doc comment and the parse_gemini_settings comment for clarity. 2. Improve find_key_line() helper to strip inline comments (// to EOL) before matching JSON keys, avoiding false positives if "memoryManager" or other keys appear in config file comments. All changes maintain backward compatibility and pass the existing test suite. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new Gemini CLI validator rule to catch the v0.40 experimental.memoryManager / experimental.autoMemory behavior split, and updates tracked tool release baselines plus all derived rule-count bookkeeping/docs/locales.
Changes:
- Implement GM-010 in
agnix-core(schema extraction + validator + tests) and add i18n strings. - Register GM-010 in the rule knowledge base + generated website docs.
- Bump tool-release baselines (Claude Code, Cursor, Gemini CLI, OpenCode) and refresh “416 rules” bookkeeping across docs/plugin metadata.
Reviewed changes
Copilot reviewed 25 out of 26 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| website/src/data/siteData.json | Bumps total rule count for website stats. |
| website/docs/rules/index.md | Adds GM-010 to rules index and updates total count. |
| website/docs/rules/generated/gm-010.md | New generated rule doc page for GM-010. |
| skills/agnix/SKILL.md | Updates referenced rule count in skill description. |
| plugin/skills/agnix/SKILL.md | Updates referenced rule count in plugin skill description. |
| plugin/commands/agnix.md | Updates referenced rule count in command metadata. |
| plugin/.claude-plugin/plugin.json | Updates plugin description to reflect new rule count. |
| locales/zh-CN.yml | Adds GM-010 locale strings (repo-root). |
| locales/es.yml | Adds GM-010 locale strings (repo-root). |
| locales/en.yml | Adds GM-010 locale strings (repo-root). |
| knowledge-base/rules.json | Adds GM-010 rule metadata; bumps totals/last_updated. |
| knowledge-base/VALIDATION-RULES.md | Adds GM-010 to human-readable rule reference; updates totals. |
| knowledge-base/RESEARCH-TRACKING.md | Updates “Last Updated” and per-tool “Last Reviewed” stamps. |
| knowledge-base/README.md | Updates rule-count reference. |
| knowledge-base/INDEX.md | Updates rule-count references in KB index. |
| crates/agnix-rules/rules.json | Mirrors knowledge-base/rules.json updates for distribution. |
| crates/agnix-core/src/schemas/gemini_settings.rs | Adds typed parsing for experimental.memoryManager / experimental.autoMemory. |
| crates/agnix-core/src/rules/gemini_settings.rs | Implements GM-010 validator logic + tests; tweaks key line-finding. |
| crates/agnix-core/locales/zh-CN.yml | Adds GM-010 locale strings (crate-local). |
| crates/agnix-core/locales/es.yml | Adds GM-010 locale strings (crate-local). |
| crates/agnix-core/locales/en.yml | Adds GM-010 locale strings (crate-local). |
| README.md | Updates top-level rule count in project readme. |
| CLAUDE.md | Updates rule count references (must remain in sync with AGENTS.md). |
| CHANGELOG.md | Documents GM-010 addition and baseline bumps. |
| AGENTS.md | Updates rule count references (kept identical to CLAUDE.md). |
| .github/tool-release-baselines.json | Bumps last_known_version for the four tool-release issues and updates last_updated. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…ences
Addresses Copilot's feedback:
1. Enhance find_key_line() to properly handle JSON strings containing //:
- Add string-aware comment detection with find_line_comment_start()
- Correctly skip escaped characters inside strings
- Prevents false positives when // appears in strings like URLs
- Note: Currently handles // line comments; /* */ block comments are
less common in .gemini/settings.json so not included in first pass
2. Update documentation references to reflect 40 categories (not 36):
- knowledge-base/INDEX.md: 416 rules across 40 categories
- SPEC.md: Updated rule count and category count
- editors/zed/README.md: Updated rule count and category count
All changes tested and compile successfully.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…r rules Addresses the remaining two review threads from PR #846: 1. gemini-code-assist: GM-010 was slotted between GM-009 and GM-004, breaking numeric ordering and drifting from RULE_IDS. Moved GM-010 below GM-004 so the validator body matches "[GM-004, GM-009, GM-010]" numerically. GM-009's early-return on parse errors still runs first. 2. copilot-pull-request-reviewer: the previous find_line_comment_start helper was string-aware for // but did not handle /* ... */ block comments, which the parser supports. Replaced the ad-hoc helper with a reuse of the schema module's strip_jsonc_comments, which already handles both comment kinds while preserving newlines so 1-indexed line numbers stay aligned with the raw input. Exported the helper from the schema module. Added two regression tests: GM-010 must not fire when "memoryManager" appears only inside a /* ... */ block comment, and same for a // line comment. Full suite: 3635 green (was 3633; +2 for the new tests). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new Gemini CLI validation rule (GM-010) to detect the v0.40 experimental.memoryManager → experimental.autoMemory behavior split, and updates tool-release baselines + derived documentation/bookkeeping to reflect the new total rule count.
Changes:
- Implement GM-010 in the Gemini settings schema + validator, with new unit tests and i18n strings.
- Bump four tool-release baselines and update research tracking “Last Reviewed” stamps.
- Regenerate/refresh rule-count bookkeeping across docs, website, plugin metadata, and rules mirrors (415 → 416).
Reviewed changes
Copilot reviewed 27 out of 28 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| website/src/data/siteData.json | Updates website rule total to 416. |
| website/docs/rules/index.md | Adds GM-010 to the rules index and updates counts. |
| website/docs/rules/generated/gm-010.md | Adds generated docs page for GM-010. |
| skills/agnix/SKILL.md | Updates embedded rule-count phrase (415 → 416). |
| plugin/skills/agnix/SKILL.md | Updates embedded rule-count phrase (415 → 416). |
| plugin/commands/agnix.md | Updates embedded rule-count phrase (415 → 416). |
| plugin/.claude-plugin/plugin.json | Updates plugin description rule-count phrase. |
| locales/zh-CN.yml | Adds gm_010 localized message/suggestion (repo-root). |
| locales/es.yml | Adds gm_010 localized message/suggestion (repo-root). |
| locales/en.yml | Adds gm_010 localized message/suggestion (repo-root). |
| knowledge-base/rules.json | Adds GM-010 rule metadata; bumps totals/last_updated. |
| knowledge-base/VALIDATION-RULES.md | Adds human-readable GM-010 entry + footer count updates. |
| knowledge-base/RESEARCH-TRACKING.md | Updates “Last Updated” and tool “Last Reviewed” dates. |
| knowledge-base/README.md | Updates rule count reference (415 → 416). |
| knowledge-base/INDEX.md | Updates rule-count references (but table needs follow-up). |
| editors/zed/README.md | Updates Zed editor docs rule count/category count. |
| crates/agnix-rules/rules.json | Mirrors knowledge-base rules.json additions (GM-010) + totals. |
| crates/agnix-core/src/schemas/gemini_settings.rs | Models experimental flags + parses them from settings JSON/JSONC. |
| crates/agnix-core/src/rules/gemini_settings.rs | Implements GM-010 validation + improves key line detection logic. |
| crates/agnix-core/locales/zh-CN.yml | Adds gm_010 localized message/suggestion (crate locales). |
| crates/agnix-core/locales/es.yml | Adds gm_010 localized message/suggestion (crate locales). |
| crates/agnix-core/locales/en.yml | Adds gm_010 localized message/suggestion (crate locales). |
| SPEC.md | Updates headline rule count/category count. |
| README.md | Updates headline rule count references. |
| CLAUDE.md | Updates rule count references (must stay in sync with AGENTS.md). |
| CHANGELOG.md | Adds unreleased changelog entry for GM-010 + baseline bumps. |
| AGENTS.md | Updates rule count references (must stay in sync with CLAUDE.md). |
| .github/tool-release-baselines.json | Bumps last_known_version for claude-code/cursor/gemini-cli/opencode + last_updated. |
Comments suppressed due to low confidence (1)
crates/agnix-core/src/rules/gemini_settings.rs:270
find_key_linecan still return an incorrect line because it searches for"<key>"withstr::findwithout checking whether that match is inside a JSON string literal. The:check does not prevent false matches when a string value contains an escaped fragment like\"memoryManager\": true. Also, since.gemini/settings.jsonsupports full JSONC (including/* ... */), this can match keys inside block comments and point diagnostics at the wrong line. Consider switching to a string-aware scanner (similar tocrates/agnix-core/src/rules/claude_settings.rs’sfind_key_line) and/or running the search over the JSONC-stripped content while preserving newlines so line numbers remain correct.
}
/// Find the 1-indexed line number of a JSON key in the content.
///
/// Uses the shared `strip_jsonc_comments` helper so both `//` line comments
/// and `/* ... */` block comments are skipped without affecting line counts
/// (newlines inside comments are preserved). This mirrors what the parser
/// sees, so a key that only appears inside a comment will not produce a
/// diagnostic line number.
fn find_key_line(content: &str, key: &str) -> Option<usize> {
let stripped = strip_jsonc_comments(content);
let needle = format!("\"{}\"", key);
for (i, line) in stripped.lines().enumerate() {
if let Some(pos) = line.find(&needle) {
let after = &line[pos + needle.len()..];
if after.trim_start().starts_with(':') {
return Some(i + 1);
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Addresses copilot-pull-request-reviewer's feedback on PR #846: after adding GM-010, the table's Gemini CLI row was stale (9 rules / MEDIUM 4) while the TOTAL had been bumped to 416, so the per-category breakdown no longer summed correctly. The audit exposed broader pre-existing drift - the table was also missing entries for claude-output-styles (6), claude-settings (1), gemini-agents (1), kiro-settings (3), and had stale Codex (58 vs 60), Claude Hooks (25 vs 27), and MCP (24 vs 25) counts from prior rule additions. Rebuilt the table directly from knowledge-base/rules.json: - All 40 categories now listed (was 36) - Per-category severity + auto-fix counts match rules.json exactly - TOTAL row updated: 214 HIGH / 174 MEDIUM / 28 LOW / 129 autofix - Rows sorted alphabetically for easier scanning Verified: sum of Rules column = 416, matches rules.json total_rules. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Summary
experimental.memoryManagerused to gate both the Memory Manager subagent and background skill extraction +/memory inbox. In v0.40+ it gates only the subagent; the inbox + extraction move to a newexperimental.autoMemoryflag. Users who upgrade with onlymemoryManager: truelose the inbox silently.GM-010 design
experimental.*keys).rules.jsonstill recordsversion_range: ">=0.40.0"for evidence metadata.experimental.*GeminiExperimentalFlags); does not broaden the top-level-keys allowlistFires when
experimental.memoryManager === trueandexperimental.autoMemoryis missing or false. Suggested action: setautoMemory: truealongside to preserve pre-v0.40 behavior.Baseline bumps
.code-workspaceschema documentedmemoryManagersplit handled by GM-010 aboveopencode agent createwriting validpermissions.deny) is already enforced by OC-008RESEARCH-TRACKING.mdLast Reviewed stamps bumped to 2026-04-29 for the four affected tools.Bookkeeping
knowledge-base/rules.json+crates/agnix-rules/rules.jsonmirror: 415 → 416 rulesscripts/sync-rule-bookkeeping.jsgm_010added toen.yml,es.yml,zh-CN.ymlin both the repo-root and per-crate (crates/agnix-core/locales/) locations (rust-i18n reads the per-crate path; thetest_every_rule_locale_key_referenced_in_source_resolvestest enforces parity there)Test plan
cargo test --workspace- full suite green (3633 in agnix-core, all other crates unchanged)cargo test -p agnix-core --lib gemini_settings- 37/37 pass including 6 new GM-010 cases + 3 new schema casescargo test -p agnix-cli --test rule_parity- 16/16 pass (GM-010 picked up in all four scanned locations)cargo test -p agnix-cli --test docs_website_parity- 7/7 passnode scripts/sync-rule-bookkeeping.js --check- reports no driftcargo check --workspace- cleanCloses #842, closes #843, closes #844, closes #845.
🤖 Generated with Claude Code