Skip to content

feat(gm): add GM-010 for memoryManager/autoMemory v0.40 split + baseline bumps#846

Merged
avifenesh merged 8 commits intomainfrom
chore/tool-release-baselines-apr29
Apr 30, 2026
Merged

feat(gm): add GM-010 for memoryManager/autoMemory v0.40 split + baseline bumps#846
avifenesh merged 8 commits intomainfrom
chore/tool-release-baselines-apr29

Conversation

@avifenesh
Copy link
Copy Markdown
Collaborator

Summary

GM-010 design

Aspect Choice Why
Severity MEDIUM (SHOULD) Behavior drift, not a parse error
Autofix None PR #25601 explicitly declined a migration shim; some users may legitimately want only the subagent
Version gate None in the validator Setting both flags is safe on any version (older Gemini ignores unknown experimental.* keys). rules.json still records version_range: ">=0.40.0" for evidence metadata.
Surface Nested - first time agnix descends into experimental.* Minimal schema addition (GeminiExperimentalFlags); does not broaden the top-level-keys allowlist

Fires when experimental.memoryManager === true and experimental.autoMemory is missing or false. Suggested action: set autoMemory: true alongside to preserve pre-v0.40 behavior.

Baseline bumps

Issue Tool Versions Triage verdict
#842 Claude Code v2.1.121 → v2.1.123 OAuth 401 retry-loop fix; no config surface
#843 Cursor 3.2.11 → 3.2.16 3.2 line = Multitask / Worktrees / Multi-root Workspaces; all on Cursor's explicit irrelevant list, no .code-workspace schema documented
#844 Gemini CLI v0.39.1 → v0.40.0 memoryManager split handled by GM-010 above
#845 OpenCode v1.14.28 → v1.14.29 One relevant line (opencode agent create writing valid permissions.deny) is already enforced by OC-008

RESEARCH-TRACKING.md Last Reviewed stamps bumped to 2026-04-29 for the four affected tools.

Bookkeeping

  • knowledge-base/rules.json + crates/agnix-rules/rules.json mirror: 415 → 416 rules
  • Count phrases across CLAUDE.md, AGENTS.md, README.md, knowledge-base/, plugin/, skills/, website siteData - all synced via scripts/sync-rule-bookkeeping.js
  • Locales: gm_010 added to en.yml, es.yml, zh-CN.yml in both the repo-root and per-crate (crates/agnix-core/locales/) locations (rust-i18n reads the per-crate path; the test_every_rule_locale_key_referenced_in_source_resolves test enforces parity there)
  • VALIDATION-RULES.md footer stats + website doc page regenerated

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 cases
  • cargo 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 pass
  • node scripts/sync-rule-bookkeeping.js --check - reports no drift
  • cargo check --workspace - clean
  • CI green including Claude workflow review

Closes #842, closes #843, closes #844, closes #845.

🤖 Generated with Claude Code

…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>
Copilot AI review requested due to automatic review settings April 30, 2026 00:30
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

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-core by parsing experimental.* flags from .gemini/settings.json and emitting a warning when memoryManager: true is set without autoMemory: 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.

Comment thread crates/agnix-core/src/schemas/gemini_settings.rs Outdated
Comment thread crates/agnix-core/src/schemas/gemini_settings.rs Outdated
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

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.

Comment thread crates/agnix-core/src/rules/gemini_settings.rs Outdated
Comment thread crates/agnix-core/src/rules/gemini_settings.rs Outdated
avifenesh and others added 3 commits April 30, 2026 03:40
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>
Copilot AI review requested due to automatic review settings April 30, 2026 00:51
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

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.

Comment thread knowledge-base/INDEX.md Outdated
Comment thread crates/agnix-core/src/rules/gemini_settings.rs Outdated
avifenesh and others added 2 commits April 30, 2026 03:57
…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>
Copilot AI review requested due to automatic review settings April 30, 2026 01:02
…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>
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new Gemini CLI validation rule (GM-010) to detect the v0.40 experimental.memoryManagerexperimental.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_line can still return an incorrect line because it searches for "<key>" with str::find without 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.json supports 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 to crates/agnix-core/src/rules/claude_settings.rs’s find_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.

Comment thread knowledge-base/INDEX.md Outdated
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>
@avifenesh avifenesh merged commit abe4aca into main Apr 30, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants