Skip to content

feat(release): prepare v2.22.1 console parity - #97

Merged
Lyellr88 merged 3 commits into
MARM-mainfrom
release/v2.22.1
Jul 18, 2026
Merged

feat(release): prepare v2.22.1 console parity#97
Lyellr88 merged 3 commits into
MARM-mainfrom
release/v2.22.1

Conversation

@Lyellr88

@Lyellr88 Lyellr88 commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • Expanded the Console Memory tab with session and log create/delete (including bulk), notebook save/delete, and compaction stage/apply/discard controls.
  • Bug Fixes

    • Notebook operations now correctly honor optional project/platform scoping (so scoped deletes affect only the intended entries).
  • Documentation

    • Updated READMEs, install guides, and changelog to v2.22.1, including revised Console Memory availability notes.
  • Tests

    • Added endpoint and HTTP tool tests covering proxy behavior, 404-on-no-op deletes, partial success on bulk session deletion, and project/platform scoped notebook mutations.

Bump MARM server release metadata to 2.22.1 across package, Docker, server metadata, and install docs.

Fill the remaining MARM Console Memory workspace gaps from the legacy dashboard with MCP-backed session, log, notebook, and compaction actions plus response-contract tests.
@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@Lyellr88, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 8 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 372f3c50-1006-4894-9d28-118f14cc1c82

📥 Commits

Reviewing files that changed from the base of the PR and between 350dc1c and 79bf556.

📒 Files selected for processing (1)
  • marm-console/tests/test_memory_dashboard_gap_routes.py
📝 Walkthrough

Walkthrough

Changes

The pull request adds MCP-backed Console Memory mutations for sessions, logs, notebooks, and compaction, propagates notebook project/platform scope through MCP transports and storage, adds route coverage, and updates release metadata to v2.22.1.

Console Memory mutations

Layer / File(s) Summary
Mutation API and MCP routing
marm-console/server/app.py, marm-console/server/memory_store.py
Adds validated REST mutation endpoints, MCP error normalization, bulk deletion aggregation, notebook persistence responses, and compaction action handling.
Mutation hooks and Memory-tab actions
marm-console/artifacts/marm-console/src/hooks/*, marm-console/artifacts/marm-console/src/lib/*, marm-console/artifacts/marm-console/src/pages/Memory.tsx
Adds session/log mutation hooks, notebook DELETE request handling, confirmation flows, delete controls, cache invalidation, and success/error notices.
Mutation route validation
marm-console/tests/test_memory_dashboard_gap_routes.py
Tests MCP payload forwarding, response contracts, zero-deletion handling, partial bulk-session failures, and notebook scope preservation.

Notebook scope propagation

Layer / File(s) Summary
Scoped MCP contracts and dispatch
marm-mcp-server/marm_mcp_server/core/models.py, marm-mcp-server/marm_mcp_server/endpoints/*, marm-mcp-server/marm_mcp_server/server_stdio.py, marm-mcp-server/marm_mcp_server/services/notebook.py, marm-mcp-server/marm_mcp_server/services/stdio_entry_tools.py
Adds optional project and platform fields and forwards them through HTTP and STDIO notebook and deletion paths.
Scoped notebook storage behavior
marm-mcp-server/marm_mcp_server/services/log_entry.py, marm-mcp-server/tests/test_http_tools.py
Normalizes notebook scope and limits deletion to matching name/project/platform values when scope is supplied.

v2.22.1 release metadata

Layer / File(s) Summary
Package and deployment version alignment
marm-mcp-server/Dockerfile, marm-mcp-server/docker-compose.yml, marm-mcp-server/marm_mcp_server/*, marm-mcp-server/pyproject.toml, marm-mcp-server/server.json
Updates package, server, container, Compose, and manifest versions to 2.22.1.
Release documentation and notices
README.md, CHANGELOG.md, docs/INSTALL-*, marm-mcp-server/README.md, marm-mcp-server/marm-docs/README.md
Updates documented versions, tool parameters, release notices, and changelog entries.

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

Possibly related PRs

  • Lyellr88/marm-memory#94: Introduces the shared log-entry deletion foundation extended here with project/platform-scoped notebook deletion.
🚥 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: b335e4292c

ℹ️ 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 on lines +568 to +573
"summaries": [
{
"candidate_id": candidate_id,
"source_memory_ids": candidate["source_memory_ids"],
"suggested_summary": candidate["proposed_summary"],
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Avoid staging placeholder compaction summaries

When a normal pending_summary candidate has no generated summary yet, memory_store.list_compaction() exposes proposed_summary as the literal fallback "Summary pending"; forwarding that value here satisfies marm_compaction(action="stage")'s non-empty validation, so a user can stage and then apply a compaction that replaces the source memories with the placeholder text. This corrupts memory contents for any pending candidate that has not already received a real suggested_summary.

Useful? React with 👍 / 👎.

Comment thread marm-console/server/app.py Outdated
Comment on lines +522 to +524
result = _mcp_tool_mutation(
"marm_delete",
{"type": "notebook", "target": name},

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 Preserve notebook scope on delete

The frontend passes project/platform query parameters when deleting an entry because notebook rows are keyed by name + project + platform, but this route drops those parameters and calls marm_delete with only the name. The underlying delete path removes notebook_entries by WHERE name = ?, so deleting one scoped variant will remove every notebook entry with the same name across all projects/platforms.

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: 4

🤖 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-console/artifacts/marm-console/src/pages/Memory.tsx`:
- Around line 845-853: Require the user to enter DELETE in the Memory.tsx
notebook deletion flow before calling deleteNote.mutate, preserving the existing
success handling after confirmation. In marm-console/server/app.py lines
131-132, remove the default value for confirm so the deletion request requires
an explicit confirmation field.

In `@marm-console/server/app.py`:
- Around line 409-416: Update the bulk session-deletion flow around
_mcp_tool_mutation to catch failures per session, record each failed item, and
continue processing subsequent sessions instead of aborting after prior
mutations. Return an MCP-compatible result that clearly reports deleted counts
and partial failures, and trigger UI/cache invalidation for both successful and
partial settlements rather than only the all-success path.
- Around line 493-525: Preserve the notebook’s full scoped identity in
upsert_notebook and delete_notebook: forward payload.project and
payload.platform in the marm_notebook add mutation, match read-back entries by
name, project, and platform, and use the delete payload’s scope fields when
calling marm_delete instead of ignoring them. Add a regression test covering
distinct notebooks with the same name across scopes and verifying scoped
deletion.

In `@README.md`:
- Around line 27-30: Update README.md lines 27-30 to describe marm-console as
shipped with Console Memory mutation routes and UI actions, while accurately
stating its current limitations instead of calling it “coming soon”; then
regenerate marm-mcp-server/README.md lines 27-30 from the corrected root README
so both mirrors match.
🪄 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

Run ID: 53f552cc-b0f0-4d6e-be54-9aee7aeb887a

📥 Commits

Reviewing files that changed from the base of the PR and between 1cc7df0 and b335e42.

📒 Files selected for processing (21)
  • CHANGELOG.md
  • README.md
  • docs/INSTALL-DOCKER.md
  • docs/INSTALL-LINUX.md
  • docs/INSTALL-PLATFORMS.md
  • docs/INSTALL-WINDOWS.md
  • marm-console/artifacts/marm-console/src/hooks/use-marm-queries.ts
  • marm-console/artifacts/marm-console/src/lib/marm-api.ts
  • marm-console/artifacts/marm-console/src/pages/Memory.tsx
  • marm-console/server/app.py
  • marm-console/server/memory_store.py
  • marm-console/tests/test_memory_dashboard_gap_routes.py
  • marm-mcp-server/Dockerfile
  • marm-mcp-server/README.md
  • marm-mcp-server/docker-compose.yml
  • marm-mcp-server/marm-docs/README.md
  • 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
  • marm-mcp-server/pyproject.toml
  • marm-mcp-server/server.json
📜 Review details
🧰 Additional context used
📓 Path-based instructions (9)
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 version occurrence and audit with python scripts/find-versions.py.

Files:

  • marm-mcp-server/docker-compose.yml
  • marm-mcp-server/marm_mcp_server/config/settings.py
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/pyproject.toml
  • marm-mcp-server/Dockerfile
  • marm-mcp-server/server.json
  • marm-mcp-server/marm_mcp_server/server.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:

  • docs/INSTALL-WINDOWS.md
  • docs/INSTALL-PLATFORMS.md
  • marm-mcp-server/marm-docs/README.md
  • docs/INSTALL-DOCKER.md
  • docs/INSTALL-LINUX.md
  • README.md
  • marm-mcp-server/README.md
  • CHANGELOG.md
{README.md,docs/PROTOCOL.md,docs/PROTOCOL-LITE.md,marm-mcp-server/marm-docs/README.md,marm-mcp-server/marm-docs/docs/PROTOCOL.md,marm-mcp-server/marm-docs/docs/PROTOCOL-LITE.md}

📄 CodeRabbit inference engine (AGENTS.md)

Keep full MCP tool lists synchronized across the root documentation and their marm-mcp-server/marm-docs/ copies, including FAQ tool counts.

Files:

  • marm-mcp-server/marm-docs/README.md
  • README.md
{README.md,marm-mcp-server/README.md,marm-mcp-server/marm-docs/README.md}

📄 CodeRabbit inference engine (AGENTS.md)

README mirrors are generated: edit root README.md as the source of truth and regenerate the PyPI and text-only variants; never hand-edit mirrors.

Files:

  • marm-mcp-server/marm-docs/README.md
  • README.md
  • marm-mcp-server/README.md
**/*.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-console/server/memory_store.py
  • marm-mcp-server/marm_mcp_server/config/settings.py
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-console/tests/test_memory_dashboard_gap_routes.py
  • marm-mcp-server/marm_mcp_server/server.py
  • marm-console/server/app.py
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 bypass it.
A marm_log_entry semantic-store failure must never fail the corresponding log write.
Never share database connections between the memory SQLite database and the concept-graph SQLite database.
Graph and concept failures must not break the seven core memory tools; the graph supervisor starts lazily and operates degraded on failure.
Use one lazy-loaded all-MiniLM-L6-v2 fastembed encoder serialized behind a lock; writes must succeed when embeddings are unavailable.
Prefer the smallest implementation that solves the problem; avoid speculative abstractions and unrequested configuration flags.
Use minimal comments only for non-obvious rationale; do not add comments narrating the next line.
Keep orchestration in its current owner file and extract modules only at genuine boundaries.

Files:

  • marm-mcp-server/marm_mcp_server/config/settings.py
  • marm-mcp-server/marm_mcp_server/__init__.py
  • marm-mcp-server/marm_mcp_server/server.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-console/tests/test_memory_dashboard_gap_routes.py
marm-mcp-server/server.json

📄 CodeRabbit inference engine (AGENTS.md)

When adding or removing an MCP tool, update the tools array.

Files:

  • marm-mcp-server/server.json
marm-mcp-server/marm_mcp_server/server.py

📄 CodeRabbit inference engine (AGENTS.md)

marm-mcp-server/marm_mcp_server/server.py: HTTP MCP tools must be whitelisted in MCP_TOOL_OPERATIONS; unlisted tools do not exist over HTTP.
When adding or removing an MCP tool, update its HTTP route and MCP_TOOL_OPERATIONS whitelist.

Files:

  • marm-mcp-server/marm_mcp_server/server.py
🔇 Additional comments (21)
marm-mcp-server/Dockerfile (1)

69-69: LGTM!

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

21-21: LGTM!

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

17-20: LGTM!

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

124-124: LGTM!

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

7-7: LGTM!

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

6-6: LGTM!

Also applies to: 20-25

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

8-8: LGTM!

CHANGELOG.md (1)

6-6: LGTM!

Also applies to: 16-22, 40-40

README.md (1)

8-8: 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: 296-296

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

8-8: LGTM!

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

1-1: LGTM!

marm-console/server/app.py (1)

107-130: LGTM!

Also applies to: 349-396, 438-456, 548-594

marm-console/server/memory_store.py (1)

370-375: LGTM!

marm-console/artifacts/marm-console/src/hooks/use-marm-queries.ts (1)

150-227: LGTM!

marm-console/artifacts/marm-console/src/lib/marm-api.ts (1)

140-180: LGTM!

marm-console/artifacts/marm-console/src/pages/Memory.tsx (1)

3-3: LGTM!

Also applies to: 497-731, 746-783, 907-1006

marm-console/tests/test_memory_dashboard_gap_routes.py (1)

1-203: LGTM!

Comment on lines +845 to +853
onClick={() => deleteNote.mutate(
{ name: editing.name!, params: { project: editing.project || undefined, platform: editing.platform || undefined } },
{
onSuccess: () => {
setActionNotice({ kind: 'success', message: `Notebook entry '${editing.name}' deleted.` });
setEditing(null);
},
},
)}

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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Enforce notebook deletion confirmation end-to-end.

The UI deletes immediately, while the server accepts an empty confirmation object.

  • marm-console/artifacts/marm-console/src/pages/Memory.tsx#L845-L853: require the user to type DELETE before invoking the mutation.
  • marm-console/server/app.py#L131-L132: remove the default so confirm must be explicitly supplied.
📍 Affects 2 files
  • marm-console/artifacts/marm-console/src/pages/Memory.tsx#L845-L853 (this comment)
  • marm-console/server/app.py#L131-L132
🤖 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 `@marm-console/artifacts/marm-console/src/pages/Memory.tsx` around lines 845 -
853, Require the user to enter DELETE in the Memory.tsx notebook deletion flow
before calling deleteNote.mutate, preserving the existing success handling after
confirmation. In marm-console/server/app.py lines 131-132, remove the default
value for confirm so the deletion request requires an explicit confirmation
field.

Comment thread marm-console/server/app.py
Comment on lines +493 to +525
@app.post("/api/notebook")
def upsert_notebook(payload: NotebookMutationPayload) -> dict:
name = payload.name.strip()
content = payload.content.strip()
if not name or not content:
raise HTTPException(status_code=422, detail="Name and content are required.")
_mcp_tool_mutation(
"marm_notebook",
{"action": "add", "name": name, "data": content},
)
try:
for entry in memory_store.list_notebook(get_memory_db_path()):
if entry["name"] == name:
return entry
except memory_store.MemoryStoreUnavailable:
pass
return {
"name": name,
"content": content,
"project": payload.project,
"platform": payload.platform,
"created_at": _now_iso(),
"updated_at": _now_iso(),
}


@app.delete("/api/notebook/{name}")
def delete_notebook(name: str, payload: NotebookDeletePayload) -> dict:
_ = payload
result = _mcp_tool_mutation(
"marm_delete",
{"type": "notebook", "target": name},
)

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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Preserve the notebook’s full scoped identity.

project and platform are accepted but omitted from the MCP add request; read-back matches only name, and deletion ignores the client’s scope query. Entries are keyed by name + project + platform, so this can create an unscoped entry, return another scope’s entry, or delete the wrong entry. Forward both fields and match all three key components. Add a scoped route regression test.

As per path instructions, prioritize runtime correctness and MCP protocol compatibility.

🤖 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 `@marm-console/server/app.py` around lines 493 - 525, Preserve the notebook’s
full scoped identity in upsert_notebook and delete_notebook: forward
payload.project and payload.platform in the marm_notebook add mutation, match
read-back entries by name, project, and platform, and use the delete payload’s
scope fields when calling marm_delete instead of ignoring them. Add a regression
test covering distinct notebooks with the same name across scopes and verifying
scoped deletion.

Source: Path instructions

Comment thread README.md
Require typed notebook delete confirmation, preserve project/platform scope through Console and MCP notebook mutations, continue bulk session deletion after per-session failures, and update Console status docs.

Add regression coverage for partial bulk session deletes and scoped notebook deletion.

@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-console/tests/test_memory_dashboard_gap_routes.py`:
- Around line 246-254: Replace the mocked memory_store.list_sessions setup at
marm-console/tests/test_memory_dashboard_gap_routes.py:246-254 with session rows
seeded in the temporary SQLite database. At
marm-console/tests/test_memory_dashboard_gap_routes.py:285-306, likewise seed
both global and scoped notebook rows in that database instead of mocking reads,
while keeping the tests driven through the real FastAPI endpoints and SQLite
persistence path.
🪄 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

Run ID: 2035cdf1-9407-499c-b42e-4c5456daf7f3

📥 Commits

Reviewing files that changed from the base of the PR and between b335e42 and 350dc1c.

📒 Files selected for processing (16)
  • CHANGELOG.md
  • README.md
  • marm-console/artifacts/marm-console/src/lib/marm-api.ts
  • marm-console/artifacts/marm-console/src/pages/Memory.tsx
  • marm-console/server/app.py
  • marm-console/tests/test_memory_dashboard_gap_routes.py
  • marm-mcp-server/README.md
  • marm-mcp-server/marm-docs/README.md
  • marm-mcp-server/marm_mcp_server/core/models.py
  • marm-mcp-server/marm_mcp_server/endpoints/logging.py
  • marm-mcp-server/marm_mcp_server/endpoints/notebook.py
  • marm-mcp-server/marm_mcp_server/server_stdio.py
  • marm-mcp-server/marm_mcp_server/services/log_entry.py
  • marm-mcp-server/marm_mcp_server/services/notebook.py
  • marm-mcp-server/marm_mcp_server/services/stdio_entry_tools.py
  • marm-mcp-server/tests/test_http_tools.py
🚧 Files skipped from review as they are similar to previous changes (5)
  • marm-console/artifacts/marm-console/src/lib/marm-api.ts
  • README.md
  • CHANGELOG.md
  • marm-console/server/app.py
  • marm-console/artifacts/marm-console/src/pages/Memory.tsx
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Analyze (javascript-typescript)
🧰 Additional context used
📓 Path-based instructions (9)
marm-mcp-server/marm_mcp_server/endpoints/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

marm-mcp-server/marm_mcp_server/endpoints/**/*.py: Endpoint logic belongs under endpoints/, split by surface; shared helpers belong in core/.
New MCP tools must be implemented in the appropriate endpoints/<surface>.py module.

Files:

  • marm-mcp-server/marm_mcp_server/endpoints/logging.py
  • marm-mcp-server/marm_mcp_server/endpoints/notebook.py
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 bypass it.
A marm_log_entry semantic-store failure must never fail the corresponding log write.
Never share database connections between the memory SQLite database and the concept-graph SQLite database.
Graph and concept failures must not break the seven core memory tools; the graph supervisor starts lazily and operates degraded on failure.
Use one lazy-loaded all-MiniLM-L6-v2 fastembed encoder serialized behind a lock; writes must succeed when embeddings are unavailable.
Prefer the smallest implementation that solves the problem; avoid speculative abstractions and unrequested configuration flags.
Use minimal comments only for non-obvious rationale; do not add comments narrating the next line.
Keep orchestration in its current owner file and extract modules only at genuine boundaries.

Files:

  • marm-mcp-server/marm_mcp_server/endpoints/logging.py
  • marm-mcp-server/marm_mcp_server/endpoints/notebook.py
  • marm-mcp-server/marm_mcp_server/services/stdio_entry_tools.py
  • marm-mcp-server/marm_mcp_server/core/models.py
  • marm-mcp-server/marm_mcp_server/services/log_entry.py
  • marm-mcp-server/marm_mcp_server/server_stdio.py
  • marm-mcp-server/marm_mcp_server/services/notebook.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/endpoints/logging.py
  • marm-mcp-server/marm_mcp_server/endpoints/notebook.py
  • marm-mcp-server/tests/test_http_tools.py
  • marm-mcp-server/marm_mcp_server/services/stdio_entry_tools.py
  • marm-mcp-server/marm_mcp_server/core/models.py
  • marm-mcp-server/marm_mcp_server/services/log_entry.py
  • marm-console/tests/test_memory_dashboard_gap_routes.py
  • marm-mcp-server/marm_mcp_server/server_stdio.py
  • marm-mcp-server/marm_mcp_server/services/notebook.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 use real FastAPI endpoints and real SQLite, mocking only when it closely matches real behavior.
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_http_tools.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_http_tools.py
  • marm-console/tests/test_memory_dashboard_gap_routes.py
{README.md,docs/PROTOCOL.md,docs/PROTOCOL-LITE.md,marm-mcp-server/marm-docs/README.md,marm-mcp-server/marm-docs/docs/PROTOCOL.md,marm-mcp-server/marm-docs/docs/PROTOCOL-LITE.md}

📄 CodeRabbit inference engine (AGENTS.md)

Keep full MCP tool lists synchronized across the root documentation and their marm-mcp-server/marm-docs/ copies, including FAQ tool counts.

Files:

  • marm-mcp-server/marm-docs/README.md
{README.md,marm-mcp-server/README.md,marm-mcp-server/marm-docs/README.md}

📄 CodeRabbit inference engine (AGENTS.md)

README mirrors are generated: edit root README.md as the source of truth and regenerate the PyPI and text-only variants; never hand-edit mirrors.

Files:

  • marm-mcp-server/marm-docs/README.md
  • marm-mcp-server/README.md
**/*.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:

  • marm-mcp-server/marm-docs/README.md
  • marm-mcp-server/README.md
marm-mcp-server/marm_mcp_server/server_stdio.py

📄 CodeRabbit inference engine (AGENTS.md)

marm-mcp-server/marm_mcp_server/server_stdio.py: STDIO must remain behaviorally identical to HTTP; preserve stable tools/list ordering and register graph/concept services after core tools.
When adding or removing an MCP tool, update STDIO bootstrap/registration with a matching wrapper or service path.

Files:

  • marm-mcp-server/marm_mcp_server/server_stdio.py
🔇 Additional comments (15)
marm-console/tests/test_memory_dashboard_gap_routes.py (3)

20-23: LGTM!

Also applies to: 124-141, 173-189


232-245: LGTM!

Also applies to: 256-270


273-284: LGTM!

Also applies to: 308-354

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

37-44: LGTM!

Also applies to: 97-102

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

58-66: LGTM!

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

29-30: LGTM!

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

154-168: LGTM!

Also applies to: 173-202

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

26-44: LGTM!

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

313-315: LGTM!

Also applies to: 406-417

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

161-207: LGTM!

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

186-193: 🎯 Functional Correctness

No issue: the remaining handlers already accept extra keywords. _use, _show, _status, and _clear all take **_, so notebook_dispatch can pass project and platform safely.

			> Likely an incorrect or invalid review comment.
marm-mcp-server/README.md (3)

8-8: LGTM!


556-558: LGTM!


27-30: 📐 Maintainability & Code Quality

No mirror regeneration needed. The release note already exists in README.md and marm-mcp-server/README.md; marm-mcp-server/marm-docs/README.md is a generated text-only subset that intentionally omits it.

			> Likely an incorrect or invalid review comment.
marm-mcp-server/marm-docs/README.md (1)

1-1: LGTM!

Also applies to: 519-521

Comment thread marm-console/tests/test_memory_dashboard_gap_routes.py Outdated
@Lyellr88
Lyellr88 merged commit 6f394f4 into MARM-main Jul 18, 2026
7 checks passed
@Lyellr88
Lyellr88 deleted the release/v2.22.1 branch July 18, 2026 04:06
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