Skip to content

Release/v2.33.0 - #119

Merged
Lyellr88 merged 4 commits into
MARM-mainfrom
release/v2.33.0
Jul 30, 2026
Merged

Release/v2.33.0#119
Lyellr88 merged 4 commits into
MARM-mainfrom
release/v2.33.0

Conversation

@Lyellr88

@Lyellr88 Lyellr88 commented Jul 30, 2026

Copy link
Copy Markdown
Owner

v2.33.0 - Keyword-Only Recall Works When the Embedding Model Is Unavailable

MARM falls back to keyword-only search when the embedding model cannot load or throws mid-recall. That fallback was unusable: it required every word of the query to appear in a single memory, so natural-language questions matched nothing and recall came back empty. This release makes the fallback actually work.

  • The fallback lane now builds its keyword query the same broader way the main search lane has since v2.31.0. The exact-lookup lane is deliberately unchanged and still requires all terms, because its results are returned in raw keyword order with nothing reranking them. FTS_QUERY_MODE=and still forces strict matching everywhere for anyone who wants it.
  • Measured on LoCoMo (1,977 questions, 5,882 ingested memories, top-5 recall, embedding model disabled): any-hit 0.1% → 55.4%, all-hit 0.1% → 46.7%, evidence recall 0.1% → 50.5%. Every question category improved. Adversarial went from 0.0% → 51.8%, which mostly reflects that a lane returning nothing had no precision to lose. With the model loaded, the same corpus scored 62.5% any-hit, so the degraded path now reaches roughly 89% of full accuracy instead of being unusable.
  • New setting SEMANTIC_SEARCH_ENABLED (default 1). Set it to 0 to run as though fastembed were not installed: no model load, no embeddings written, keyword-only recall. It exists because the degraded path could not be measured any other way, and it also lets a low-memory host skip loading the model. marm-memory doctor reports when it is off.
  • FTS_LONE_HIT_SCORE now applies to the fallback lane. That lane shares a row fetcher with the exact-lookup lane, so it always reported 1.0 correct under strict all-terms matching, wrong once the lane matched on a broad query, where a single match can mean one memory happened to share one word. The exact lane still always uses 1.0. No change at the default.
  • Fixed: the fastembed and apscheduler warnings in settings.py printed to stdout, which can corrupt JSON-RPC on the STDIO transport. Both now use stderr.

Behavior is unchanged for anyone whose embedding model loads normally, and there is no migration, schema change, or re-embed.

Validation

Suite: 872 passed, 2 skipped. tests/test_exact_retrieval_lane.py passes unmodified, which is the guard that the widening did not leak into the exact lane. The 7 new tests were each re-run with their fix removed to confirm they fail one initially passed for the wrong reason, because recency decay between two successive recalls satisfied the assertion by about 4e-11 rather than by the setting under test.

Summary by CodeRabbit

  • New Features
    • Added SEMANTIC_SEARCH_ENABLED to disable embedding/semantic behavior and force keyword matching only.
    • Added marm-memory init runtime setup commands, including a Claude integration option.
    • Improved diagnostics to surface whether semantic search is available (keyword-only mode).
  • Bug Fixes
    • Improved embedding-unavailable recall fallback to use broader keyword matching (avoids empty recall).
    • Fixed “lone hit” FTS scoring for the fallback lane while keeping exact/lexical scoring unchanged.
  • Documentation
    • Updated configuration references and all v2.33.0 version labels across installation and overview docs.

Lyellr88 and others added 2 commits July 29, 2026 05:40
Replace the personal Gmail and the retired marmsystems.com addresses with
the business addresses, using support@marmemory.com where the contact is a
support/reporting channel and ryanlyell@marmemory.com for authorship fields.

- SECURITY.md, CONTRIBUTING.md: support@marmemory.com
- pyproject.toml: fix the ryanlyell@marmmemory.com typo (doubled "m") that
  shipped in the 2.32.0 authors metadata; maintainers to support@
- __init__.py: __email__ to match the author field

Also carries a pyproject description wording fix (indices -> indexing).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ff (v2.33.0)

Recall falls back to keyword-only search when the embedding model cannot load or
throws. That lane built its MATCH with strict AND, so a natural-language question
matched nothing, the LIKE fallback then searched for the whole question as one
substring and also matched nothing. If the model failed to load, recall returned
empty for effectively every question.

Measured on LoCoMo (1,977 questions, 5,882 memories, top-5) with the encoder
disabled: any-hit 0.1% -> 55.4%, all-hit 0.1% -> 46.7%, ev-recall 0.1% -> 50.5%.
Every category improved; adversarial went 0.0% -> 51.8%, since there was no
precision to lose from a lane returning nothing. The full engine scores 62.5% on
this corpus, so the degraded path now reaches ~89% of it.

The change is one line: apply_temporal was already the lane discriminator, so the
fallbacks take the wide builder and the exact lane keeps strict AND. No
FTS_WIDEN_FALLBACK setting - a knob was used to run the arms and then removed,
because narrow is broken rather than a tradeoff and FTS_QUERY_MODE=and already
forces strict matching everywhere.

- SEMANTIC_SEARCH_ENABLED (default 1): set to 0 to run as though fastembed were
  absent. Added because the degraded path could not be measured any other way;
  also lets a low-memory host skip the model. Surfaced in doctor.
- FTS_LONE_HIT_SCORE now applies to the fallback lane. It shares a row fetcher
  with the exact lane and so always reported 1.0, which was right under strict
  AND and wrong under a wide OR. Exact lane still always uses 1.0. No change at
  the default.
- Both dependency warnings in settings.py moved to stderr; stdout carries
  JSON-RPC on the STDIO transport.

Tests: 5 new fallback-lane tests plus 2 for the lone-hit wiring, all verified to
fail without their fix. test_exact_retrieval_lane.py passes unmodified as the
widening regression guard. Suite: 872 passed, 2 skipped.

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

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a80252bb-53e1-4c08-a497-8f8a7339b1f6

📥 Commits

Reviewing files that changed from the base of the PR and between 479899c and ae632ea.

⛔ Files ignored due to path filters (1)
  • marm-console/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (2)
  • marm-console/pnpm-workspace.yaml
  • marm-mcp-server/tests/test_hybrid_search.py
📜 Recent review details
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{py,json,md,toml,yml,yaml,Dockerfile}

📄 CodeRabbit inference engine (AGENTS.md)

Keep changes surgical: modify only what the task requires, match existing style, and preserve behavior during refactors.

Files:

  • marm-console/pnpm-workspace.yaml
  • marm-mcp-server/tests/test_hybrid_search.py
**/*

📄 CodeRabbit inference engine (AGENTS.md)

**/*: Never commit changes without an explicit user request.
Use semantic versioning: MAJOR for breaking changes, MINOR for new tools, parameters, or features, and PATCH for fixes and documentation updates.

Files:

  • marm-console/pnpm-workspace.yaml
  • marm-mcp-server/tests/test_hybrid_search.py
**/*.{md,py}

📄 CodeRabbit inference engine (AGENTS.md)

When adding or removing an MCP tool, update every full tool list and tool count in the README, protocol documentation, FAQ, and maintained marm-docs copies; add tests covering both transports.

Files:

  • marm-mcp-server/tests/test_hybrid_search.py
marm-mcp-server/tests/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

marm-mcp-server/tests/**/*.py: Run tests with pytest from marm-mcp-server/; tests should exercise real FastAPI endpoints and real SQLite, using mocks only when they preserve at least 95% fidelity and provide meaningful speedup.
Every new MARM Console API route must have at least one happy-path FastAPI response-contract test with the MCP adapter stubbed.
Do not write existence-check or coded-to-pass tests; prefer deep tests exercising real paths over broad shallow coverage.
Use pytest.mark.skip only for genuinely unavailable dependencies, never merely to avoid implementation effort.

Files:

  • marm-mcp-server/tests/test_hybrid_search.py
**/tests/**

⚙️ CodeRabbit configuration file

**/tests/**: Focus on tests that are flaky, non-isolated, incorrectly asserting behavior, or missing coverage for a changed high-risk path. Skip minor naming, comments, and layout preferences.

Files:

  • marm-mcp-server/tests/test_hybrid_search.py
**/*.py

⚙️ CodeRabbit configuration file

**/*.py: Prioritize runtime correctness, async/concurrency safety, SQLite transaction safety, auth/rate-limit behavior, release-breaking packaging issues, and MCP protocol compatibility.

Files:

  • marm-mcp-server/tests/test_hybrid_search.py
🪛 ast-grep (0.45.0)
marm-mcp-server/tests/test_hybrid_search.py

[error] 1349-1356: Command coming from incoming request
Context: subprocess.run(
[sys.executable, "-c", script, str(db_path)],
capture_output=True,
text=True,
env=env,
cwd=str(pathlib.Path(file).resolve().parent.parent),
timeout=120,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)

🔇 Additional comments (2)
marm-console/pnpm-workspace.yaml (1)

9-13: 🔒 Security & Privacy

Keep the PostCSS override unchanged.

'>=8.5.18' already matches the current overridden/resolved version (8.5.24) and covers the advisory-fixed floor for this source-map path traversal issue; raising it to 8.5.24 would create an unnecessarily strict semantic floor.

			> Likely an incorrect or invalid review comment.
marm-mcp-server/tests/test_hybrid_search.py (1)

1307-1360: LGTM!


📝 Walkthrough

Walkthrough

Version 2.33.0 adds configurable semantic-search availability, broadens keyword fallback recall when embeddings are unavailable, applies fallback-specific lone-hit scoring, exposes doctor diagnostics, adds regression tests, and updates release metadata and documentation.

Changes

Semantic fallback and diagnostics

Layer / File(s) Summary
Semantic-search configuration and diagnostics
marm-mcp-server/marm_mcp_server/config/settings.py, marm-mcp-server/marm_mcp_server/services/*, README.md, marm-mcp-server/README.md, marm-mcp-server/marm_mcp_server/resources/marm-docs/README.md
SEMANTIC_SEARCH_ENABLED now controls semantic-search availability alongside fastembed installation, with the state exposed in doctor diagnostics and documented as keyword-only fallback behavior.

Fallback recall and release

Layer / File(s) Summary
Fallback FTS recall and scoring
marm-mcp-server/marm_mcp_server/core/memory_recall.py, marm-mcp-server/marm_mcp_server/core/memory_scoring.py, marm-mcp-server/marm_mcp_server/core/memory_utils.py
Embedding-unavailable recall uses wide FTS matching and passes FTS_LONE_HIT_SCORE, while exact recall remains strict with a 1.0 lone-hit score.
Fallback recall regression coverage
marm-mcp-server/tests/test_hybrid_search.py
Tests cover fallback matching, exact-mode strictness, session scoping, feature gating, configured lone-hit scoring, and disabled embedding writes.
v2.33.0 release metadata and documentation
CHANGELOG.md, CONTRIBUTING.md, SECURITY.md, docs/*, marm-mcp-server/{Dockerfile,README.md,docker-compose.yml,pyproject.toml,server.json}, marm-mcp-server/marm_mcp_server/{__init__.py,server.py}, marm-console/pnpm-workspace.yaml
Version identifiers, package metadata, contact details, CLI documentation, installation references, and the PostCSS override are updated.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 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.

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.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 479899ca6e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread marm-mcp-server/README.md
</details>

For memory behavior, transports, supported clients, compaction, and backup questions, see the [FAQ](https://github.com/Lyellr88/marm-memory/blob/MARM-main/docs/FAQ.md).
For memory behavior, transports, supported clients, compaction, and backup questions, see the [FAQ](docs/FAQ.md).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Restore an absolute FAQ URL

In the PyPI README variant, this relative URL resolves beneath marm-mcp-server/, but a repo-wide search finds no marm-mcp-server/docs/FAQ.md; the FAQ exists only at root docs/FAQ.md and in the packaged resources. Consequently, readers following this link from the source view—and potentially the PyPI-rendered description—reach a nonexistent page, so retain the absolute GitHub URL or use a target valid for the publication context.

AGENTS.md reference: AGENTS.md:L33-L36

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 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.

Inline comments:
In `@marm-mcp-server/tests/test_hybrid_search.py`:
- Around line 1216-1255: Extend the semantic-disabled coverage beyond the
import-time flag by adding a fresh-process test that sets
SEMANTIC_SEARCH_ENABLED=0, instantiates MARMMemory, verifies encoder loading is
refused, and performs a normal write whose stored result has no embedding. Reuse
the existing subprocess setup and relevant MARMMemory symbols, while preserving
the current assertions for the enabled and disabled configuration values.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 1e19acf5-73de-4de1-9529-6a0b838b9c3f

📥 Commits

Reviewing files that changed from the base of the PR and between 57546da and 479899c.

📒 Files selected for processing (24)
  • CHANGELOG.md
  • CONTRIBUTING.md
  • README.md
  • SECURITY.md
  • docs/INSTALL-DOCKER.md
  • docs/INSTALL-LINUX.md
  • docs/INSTALL-PLATFORMS.md
  • docs/INSTALL-WINDOWS.md
  • docs/TECHNICAL-OVERVIEW.md
  • marm-mcp-server/Dockerfile
  • marm-mcp-server/README.md
  • marm-mcp-server/docker-compose.yml
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/marm_mcp_server/config/settings.py
  • marm-mcp-server/marm_mcp_server/core/memory_recall.py
  • marm-mcp-server/marm_mcp_server/core/memory_scoring.py
  • marm-mcp-server/marm_mcp_server/core/memory_utils.py
  • marm-mcp-server/marm_mcp_server/resources/marm-docs/README.md
  • marm-mcp-server/marm_mcp_server/server.py
  • marm-mcp-server/marm_mcp_server/services/cli_output.py
  • marm-mcp-server/marm_mcp_server/services/runtime_status.py
  • marm-mcp-server/pyproject.toml
  • marm-mcp-server/server.json
  • marm-mcp-server/tests/test_hybrid_search.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (11)
**/*.{py,json,md,toml,yml,yaml,Dockerfile}

📄 CodeRabbit inference engine (AGENTS.md)

Keep changes surgical: modify only what the task requires, match existing style, and preserve behavior during refactors.

Files:

  • SECURITY.md
  • CONTRIBUTING.md
  • docs/INSTALL-DOCKER.md
  • marm-mcp-server/marm_mcp_server/services/cli_output.py
  • docs/INSTALL-WINDOWS.md
  • marm-mcp-server/marm_mcp_server/server.py
  • marm-mcp-server/marm_mcp_server/services/runtime_status.py
  • docs/TECHNICAL-OVERVIEW.md
  • README.md
  • marm-mcp-server/docker-compose.yml
  • marm-mcp-server/marm_mcp_server/core/memory_utils.py
  • marm-mcp-server/pyproject.toml
  • marm-mcp-server/server.json
  • docs/INSTALL-PLATFORMS.md
  • docs/INSTALL-LINUX.md
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/marm_mcp_server/core/memory_scoring.py
  • marm-mcp-server/README.md
  • marm-mcp-server/marm_mcp_server/config/settings.py
  • CHANGELOG.md
  • marm-mcp-server/marm_mcp_server/resources/marm-docs/README.md
  • marm-mcp-server/marm_mcp_server/core/memory_recall.py
  • marm-mcp-server/tests/test_hybrid_search.py
**/*.{md,py}

📄 CodeRabbit inference engine (AGENTS.md)

When adding or removing an MCP tool, update every full tool list and tool count in the README, protocol documentation, FAQ, and maintained marm-docs copies; add tests covering both transports.

Files:

  • SECURITY.md
  • CONTRIBUTING.md
  • docs/INSTALL-DOCKER.md
  • marm-mcp-server/marm_mcp_server/services/cli_output.py
  • docs/INSTALL-WINDOWS.md
  • marm-mcp-server/marm_mcp_server/server.py
  • marm-mcp-server/marm_mcp_server/services/runtime_status.py
  • docs/TECHNICAL-OVERVIEW.md
  • README.md
  • marm-mcp-server/marm_mcp_server/core/memory_utils.py
  • docs/INSTALL-PLATFORMS.md
  • docs/INSTALL-LINUX.md
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/marm_mcp_server/core/memory_scoring.py
  • marm-mcp-server/README.md
  • marm-mcp-server/marm_mcp_server/config/settings.py
  • CHANGELOG.md
  • marm-mcp-server/marm_mcp_server/resources/marm-docs/README.md
  • marm-mcp-server/marm_mcp_server/core/memory_recall.py
  • marm-mcp-server/tests/test_hybrid_search.py
**/*

📄 CodeRabbit inference engine (AGENTS.md)

**/*: Never commit changes without an explicit user request.
Use semantic versioning: MAJOR for breaking changes, MINOR for new tools, parameters, or features, and PATCH for fixes and documentation updates.

Files:

  • SECURITY.md
  • CONTRIBUTING.md
  • docs/INSTALL-DOCKER.md
  • marm-mcp-server/marm_mcp_server/services/cli_output.py
  • marm-mcp-server/Dockerfile
  • docs/INSTALL-WINDOWS.md
  • marm-mcp-server/marm_mcp_server/server.py
  • marm-mcp-server/marm_mcp_server/services/runtime_status.py
  • docs/TECHNICAL-OVERVIEW.md
  • README.md
  • marm-mcp-server/docker-compose.yml
  • marm-mcp-server/marm_mcp_server/core/memory_utils.py
  • marm-mcp-server/pyproject.toml
  • marm-mcp-server/server.json
  • docs/INSTALL-PLATFORMS.md
  • docs/INSTALL-LINUX.md
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/marm_mcp_server/core/memory_scoring.py
  • marm-mcp-server/README.md
  • marm-mcp-server/marm_mcp_server/config/settings.py
  • CHANGELOG.md
  • marm-mcp-server/marm_mcp_server/resources/marm-docs/README.md
  • marm-mcp-server/marm_mcp_server/core/memory_recall.py
  • marm-mcp-server/tests/test_hybrid_search.py
**/*.md

⚙️ CodeRabbit configuration file

**/*.md: Only flag documentation issues that are materially wrong, misleading for installation/release behavior, or inconsistent with live MCP behavior. Skip style, phrasing, formatting, and wording preferences.

Files:

  • SECURITY.md
  • CONTRIBUTING.md
  • docs/INSTALL-DOCKER.md
  • docs/INSTALL-WINDOWS.md
  • docs/TECHNICAL-OVERVIEW.md
  • README.md
  • docs/INSTALL-PLATFORMS.md
  • docs/INSTALL-LINUX.md
  • marm-mcp-server/README.md
  • CHANGELOG.md
  • marm-mcp-server/marm_mcp_server/resources/marm-docs/README.md
marm-mcp-server/marm_mcp_server/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

marm-mcp-server/marm_mcp_server/**/*.py: All memory writes must use the serialized asynchronous write queue; do not add bypass paths.
A semantic-store failure during marm_log_entry must never fail the corresponding log write.
Keep the memory database and isolated concept-graph database on separate connection pools; never share connections between them.
Graph and concept failures must never break the seven core memory tools.
marm_smart_recall must keep primary memory ranking authoritative; graph enrichment is bounded, read-only, fail-open, and must be trimmed before primary results when enforcing response limits.
Use one lazy-loaded jinaai/jina-embeddings-v2-small-en encoder with 512 dimensions, serialized behind a lock; writes must succeed if the encoder is unavailable.
Keep orchestration in its current owner file and extract modules only at real boundaries consistent with the existing endpoint split.
Comments must be minimal, explain only non-obvious reasons, and never narrate the next line.

Files:

  • marm-mcp-server/marm_mcp_server/services/cli_output.py
  • marm-mcp-server/marm_mcp_server/server.py
  • marm-mcp-server/marm_mcp_server/services/runtime_status.py
  • marm-mcp-server/marm_mcp_server/core/memory_utils.py
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/marm_mcp_server/core/memory_scoring.py
  • marm-mcp-server/marm_mcp_server/config/settings.py
  • marm-mcp-server/marm_mcp_server/core/memory_recall.py
**/*.py

⚙️ CodeRabbit configuration file

**/*.py: Prioritize runtime correctness, async/concurrency safety, SQLite transaction safety, auth/rate-limit behavior, release-breaking packaging issues, and MCP protocol compatibility.

Files:

  • marm-mcp-server/marm_mcp_server/services/cli_output.py
  • marm-mcp-server/marm_mcp_server/server.py
  • marm-mcp-server/marm_mcp_server/services/runtime_status.py
  • marm-mcp-server/marm_mcp_server/core/memory_utils.py
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/marm_mcp_server/core/memory_scoring.py
  • marm-mcp-server/marm_mcp_server/config/settings.py
  • marm-mcp-server/marm_mcp_server/core/memory_recall.py
  • marm-mcp-server/tests/test_hybrid_search.py
marm-mcp-server/{pyproject.toml,server.json,marm_mcp_server/__init__.py,marm_mcp_server/config/settings.py,marm_mcp_server/server.py,Dockerfile,docker-compose.yml}

📄 CodeRabbit inference engine (AGENTS.md)

When bumping the version, update every listed package, manifest, server, Docker, and configuration version occurrence, and audit with python scripts/find-versions.py.

Files:

  • marm-mcp-server/Dockerfile
  • marm-mcp-server/marm_mcp_server/server.py
  • marm-mcp-server/docker-compose.yml
  • marm-mcp-server/pyproject.toml
  • marm-mcp-server/server.json
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/marm_mcp_server/config/settings.py
marm-mcp-server/marm_mcp_server/server.py

📄 CodeRabbit inference engine (AGENTS.md)

Keep HTTP MCP tools listed in MCP_TOOL_OPERATIONS; tools absent from this whitelist must not be exposed over HTTP.

Files:

  • marm-mcp-server/marm_mcp_server/server.py
marm-mcp-server/{server.py,server_stdio.py,server.json}

📄 CodeRabbit inference engine (AGENTS.md)

When adding or removing an MCP tool, update the endpoint implementation, HTTP route and whitelist, STDIO registration/wrapper, and server.json tools array.

Files:

  • marm-mcp-server/server.json
marm-mcp-server/tests/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

marm-mcp-server/tests/**/*.py: Run tests with pytest from marm-mcp-server/; tests should exercise real FastAPI endpoints and real SQLite, using mocks only when they preserve at least 95% fidelity and provide meaningful speedup.
Every new MARM Console API route must have at least one happy-path FastAPI response-contract test with the MCP adapter stubbed.
Do not write existence-check or coded-to-pass tests; prefer deep tests exercising real paths over broad shallow coverage.
Use pytest.mark.skip only for genuinely unavailable dependencies, never merely to avoid implementation effort.

Files:

  • marm-mcp-server/tests/test_hybrid_search.py
**/tests/**

⚙️ CodeRabbit configuration file

**/tests/**: Focus on tests that are flaky, non-isolated, incorrectly asserting behavior, or missing coverage for a changed high-risk path. Skip minor naming, comments, and layout preferences.

Files:

  • marm-mcp-server/tests/test_hybrid_search.py
🪛 ast-grep (0.45.0)
marm-mcp-server/tests/test_hybrid_search.py

[error] 1225-1236: Command coming from incoming request
Context: subprocess.run(
[
sys.executable,
"-c",
"from marm_mcp_server.config.settings import SEMANTIC_SEARCH_AVAILABLE as v;"
"print(repr(v))",
],
capture_output=True,
text=True,
env=env,
cwd=str(pathlib.Path(file).resolve().parent.parent),
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)

🔇 Additional comments (24)
CHANGELOG.md (1)

5-25: LGTM!

CONTRIBUTING.md (1)

9-9: LGTM!

SECURITY.md (1)

7-7: LGTM!

docs/INSTALL-DOCKER.md (1)

5-5: LGTM!

docs/INSTALL-LINUX.md (1)

5-5: LGTM!

Also applies to: 323-323

docs/INSTALL-PLATFORMS.md (1)

1-1: LGTM!

docs/INSTALL-WINDOWS.md (1)

5-5: LGTM!

Also applies to: 297-297

docs/TECHNICAL-OVERVIEW.md (1)

3-3: LGTM!

marm-mcp-server/Dockerfile (1)

76-76: LGTM!

marm-mcp-server/docker-compose.yml (1)

8-8: LGTM!

Also applies to: 21-21

marm-mcp-server/marm_mcp_server/__init__.py (1)

17-22: LGTM!

marm-mcp-server/marm_mcp_server/server.py (1)

8-8: LGTM!

marm-mcp-server/pyproject.toml (1)

7-16: LGTM!

marm-mcp-server/server.json (1)

6-6: LGTM!

Also applies to: 20-25

marm-mcp-server/marm_mcp_server/config/settings.py (1)

80-104: LGTM!

Also applies to: 182-182, 347-351

marm-mcp-server/marm_mcp_server/services/runtime_status.py (1)

26-26: LGTM!

Also applies to: 232-232

marm-mcp-server/marm_mcp_server/services/cli_output.py (1)

95-96: LGTM!

README.md (1)

8-8: LGTM!

Also applies to: 988-988

marm-mcp-server/README.md (1)

10-10: LGTM!

Also applies to: 133-134, 990-990, 1129-1129

marm-mcp-server/marm_mcp_server/resources/marm-docs/README.md (1)

1-1: LGTM!

Also applies to: 22-23, 107-108, 958-958, 1095-1096

marm-mcp-server/marm_mcp_server/core/memory_recall.py (1)

12-12: LGTM!

Also applies to: 352-394

marm-mcp-server/marm_mcp_server/core/memory_utils.py (1)

139-142: LGTM!

marm-mcp-server/marm_mcp_server/core/memory_scoring.py (1)

200-201: LGTM!

Also applies to: 234-240

marm-mcp-server/tests/test_hybrid_search.py (1)

1126-1214: LGTM!

Also applies to: 1258-1306

Comment thread marm-mcp-server/tests/test_hybrid_search.py
Lyellr88 and others added 2 commits July 30, 2026 06:43
The existing test only proved the flag reached settings.py. The release claims
more than that: no model load, and no embeddings written. Both are decided by an
import-time constant read inside MARMMemory, so neither was covered.

Adds a fresh-process test that sets the switch, instantiates MARMMemory, asserts
_load_encoder_lazily() refuses and no encoder object is built, performs a normal
store_memory, then reads the row back and asserts its embedding is NULL.

Verified additive rather than duplicate: with the SEMANTIC_SEARCH_AVAILABLE guard
deleted from _load_encoder_lazily, only this new test fails while the existing
config-value test still passes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
postcss <=8.5.17 auto-loads the .map file named by a sourceMappingURL comment and
can be walked out of the intended directory, disclosing arbitrary .map files
(Dependabot #11, high). The console pinned 8.5.16.

postcss is transitive via vite, so there is no dependency line to bump. Adds a
pnpm override alongside the existing esbuild one, in pnpm-workspace.yaml where
this workspace already keeps them. Resolves postcss 8.5.16 -> 8.5.24, pulling
nanoid 3.3.15 -> 3.3.16 as its own dependency.

A range rather than a pin, so a later resolution cannot drop back below the fix.

Practical exposure was low: postcss runs at build time over CSS authored in this
repo, and nothing at runtime or in the published MCP server touches it.

Verified: installed tree resolves to postcss@8.5.24, pnpm typecheck clean, and
pnpm build succeeds with CSS emitted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Lyellr88
Lyellr88 merged commit 92f37da into MARM-main Jul 30, 2026
7 checks passed
@Lyellr88
Lyellr88 deleted the release/v2.33.0 branch July 30, 2026 11:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant