From f2c08bc7cabf0c3620ceb8ba34f90bbb5bb07985 Mon Sep 17 00:00:00 2001 From: escott- Date: Mon, 5 Oct 2026 22:18:00 -0700 Subject: [PATCH] chore(release): prepare MCP 1.0.17 Bumps the workspace, npm package, MCP Registry metadata, and the boundary self-test to 1.0.17, and adds the 1.0.17 changelog covering the six commits on main since v1.0.16: Claude auto-memory routing and the new setup default (a63d160), subagent search modes and stale instructions (ffab454), plan and doc mirroring with the session's resolved scope (fb1bac8), project-link ranking, the `link` command and the sync-bridge link audit (452bd2a), and the resume hint in the structured result that Claude Code reads (3241462). A test-fixture change (05f64b8) is internal. No new crates: mcp-session now uses `futures`, which the workspace already depends on. Checked on ovh-desktop against main 3241462 plus this change: cargo fmt --check, clippy --workspace --all-targets -D warnings, cargo test --locked --workspace --all-targets (3005 passed, 0 failed, 21 ignored), account_connection_smoke (9 tests), cargo audit and cargo deny (clean), the public-boundary, release-contract, DCO and workflow script tests, the adoption (14) and grounding script tests, and npm test (6 passed). Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: escott- --- .github/scripts/test_public_boundary.py | 2 +- CHANGELOG.md | 64 +++++++++++++++++++++++++ Cargo.lock | 14 +++--- Cargo.toml | 14 +++--- package.json | 2 +- server.json | 4 +- 6 files changed, 82 insertions(+), 18 deletions(-) diff --git a/.github/scripts/test_public_boundary.py b/.github/scripts/test_public_boundary.py index 3047562..9fec16e 100644 --- a/.github/scripts/test_public_boundary.py +++ b/.github/scripts/test_public_boundary.py @@ -26,7 +26,7 @@ def test_private_search_names_are_rejected_in_public_comments_and_copy(self) -> boundary.verify_paths_and_source(root) def test_repository_satisfies_public_boundary(self) -> None: - self.assertEqual(boundary.verify(REPOSITORY_ROOT), "1.0.16") + self.assertEqual(boundary.verify(REPOSITORY_ROOT), "1.0.17") def test_forbidden_private_source_is_detected(self) -> None: with tempfile.TemporaryDirectory(prefix="public-boundary-") as temporary: diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b0876f..a50c361 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,69 @@ # Changelog +## 1.0.17 + +- Claude Code auto memory: setup now turns Claude's auto memory off when it + configures Claude Code, and the hooks deny writes to Claude's auto memory files + (`~/.claude/projects/*/memory`) with a message naming the ContextStream call to + use instead (`session(action="remember")`, `capture_lesson`, or a `fact` node). + To keep auto memory on, answer so in the setup wizard's review step, run + `setup --keep-claude-auto-memory`, or set `CONTEXTSTREAM_KEEP_CLAUDE_AUTO_MEMORY=1`; + `CONTEXTSTREAM_ALLOW_LOCAL_MEMORY=true` lifts the write denial. `doctor` reports + the setting and `doctor --repair --scope global` turns auto memory off. + `import-local-memory` copies existing memory files into ContextStream once + (a63d160). +- Hooks: an approved Claude Code plan is saved as a ContextStream plan with one + linked task per numbered step. A plan with the same title is adopted, and + approving again updates it. Repository runbooks, ADRs, RFCs, postmortems and + notes are mirrored to ContextStream docs keyed by repository and path, for + checkouts linked to a workspace (scrubbed, 256 KB cap). Codex `apply_patch` + writes get the same handling. Hooks recognize every ContextStream server name, + including the claude.ai connector. Save guidance is injected once per prompt and + only when the prompt asks to save something, and it routes each kind + (preference, lesson, decision, doc, plan, todo, ticket, handoff). The + `on-save-intent` hook is no longer installed (a63d160). +- Hooks: plan capture and doc mirroring use the workspace and project that a + successful `init` or `context` resolved for the host session (kept for 24 + hours), so they also work in checkouts that only have a legacy folder link. A + repository doc written before the session has a scope is queued and mirrored + once `init` or `context` succeeds. `import-local-memory` skips folders with no + workspace link, explains a 403 on a stale link, and takes `--project-dir`, + `--workspace-id` and `--project-id` to import one Claude project into an + explicit scope (fb1bac8). +- Search-first nudges give the exact ContextStream call for each local search: + regex to `mode=pattern`, literals to `exhaustive`, identifiers to `refactor`, + file-name searches to `pattern` with `output_format="paths"`, `-C/-A/-B` to + `context_lines`, glob and type filters to `file_types`, and Explore to + `mode=guided` with the task as `intent`. The same table now reaches Explore and + Plan subagents. The rules recipe for goal, risk and term nodes passes `title` + and `content`, which `memory(action="create_node")` requires (a63d160, ffab454). +- Project links: `contextstream-mcp link [--path|--all] [--fix] [--project-id] + [--pin] [--json]` shows which project a checkout is linked to, ranks the + candidates with the reasons, and re-links with a verified repository + fingerprint. A checkout is ranked by the Git repository it tracks, other + checkouts of the same repository on the machine, names, and where it was + indexed before; benchmark, isolated, generated, worktree-named, dated or + temporary projects are penalized, and a close call is reported as ambiguous. + The sync bridge runs the same audit two minutes after it starts and every six + hours, repairs only links backed by the repository or a sibling checkout, never + into an isolated workspace and never for a pinned or temporary folder, and + records every change with the previous link in `~/.contextstream/link-audit.json` + (`CONTEXTSTREAM_LINK_AUDIT=0` turns the audit off). `doctor --scope project` + reports a `project_link` check and `doctor --repair` applies a confident fix. + `project(action="ingest_local")` reuses the folder's existing project instead of + creating a new one named after the folder, and worktrees no longer start new + projects (452bd2a). +- Session: the session id and the `resume` call that 1.0.16 added to `init`, and + the own-session note on `resume` and `resume_list`, were only in the text of + those results, which Claude Code does not show. They are now in the structured + result too: `init` adds `resume_hint` next to `session_id`, and `resume` and + `resume_list` write the finished text, with the note and the scope note, into + the structured text. The text itself is unchanged (3241462). +- `testing/adoption` adds `persistence_adoption.py`, which measures the share of + an agent's durable saves that went to local files, and `search_adoption.py` now + reads Codex code-mode `exec` calls. `scripts/ovh-cargo.sh` defaults to + ovh-desktop (a63d160, ffab454). + ## 1.0.16 - Session: `resume` and `resume_list` can now leave out your own session on the diff --git a/Cargo.lock b/Cargo.lock index f96d984..175122c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1624,7 +1624,7 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "mcp-acceleration-products" -version = "1.0.16" +version = "1.0.17" dependencies = [ "async-trait", "chrono", @@ -1642,7 +1642,7 @@ dependencies = [ [[package]] name = "mcp-client" -version = "1.0.16" +version = "1.0.17" dependencies = [ "anyhow", "base64 0.23.1", @@ -1670,7 +1670,7 @@ dependencies = [ [[package]] name = "mcp-model-registry" -version = "1.0.16" +version = "1.0.17" dependencies = [ "mcp-types", "serde", @@ -1679,7 +1679,7 @@ dependencies = [ [[package]] name = "mcp-server" -version = "1.0.16" +version = "1.0.17" dependencies = [ "anyhow", "async-trait", @@ -1736,7 +1736,7 @@ dependencies = [ [[package]] name = "mcp-session" -version = "1.0.16" +version = "1.0.17" dependencies = [ "chrono", "dashmap", @@ -1756,7 +1756,7 @@ dependencies = [ [[package]] name = "mcp-tools" -version = "1.0.16" +version = "1.0.17" dependencies = [ "anyhow", "async-trait", @@ -1792,7 +1792,7 @@ dependencies = [ [[package]] name = "mcp-types" -version = "1.0.16" +version = "1.0.17" dependencies = [ "async-trait", "chrono", diff --git a/Cargo.toml b/Cargo.toml index c1b7aa9..f5bfe37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ members = [ ] [workspace.package] -version = "1.0.16" +version = "1.0.17" edition = "2021" rust-version = "1.95" license = "MIT" @@ -90,12 +90,12 @@ fs2 = "0.4" notify = "8" # Workspace crates -mcp-types = { version = "=1.0.16", path = "crates/mcp-types" } -mcp-client = { version = "=1.0.16", path = "crates/mcp-client" } -mcp-session = { version = "=1.0.16", path = "crates/mcp-session" } -mcp-tools = { version = "=1.0.16", path = "crates/mcp-tools" } -mcp-model-registry = { version = "=1.0.16", path = "crates/mcp-model-registry" } -mcp-acceleration-products = { version = "=1.0.16", path = "crates/mcp-acceleration-products" } +mcp-types = { version = "=1.0.17", path = "crates/mcp-types" } +mcp-client = { version = "=1.0.17", path = "crates/mcp-client" } +mcp-session = { version = "=1.0.17", path = "crates/mcp-session" } +mcp-tools = { version = "=1.0.17", path = "crates/mcp-tools" } +mcp-model-registry = { version = "=1.0.17", path = "crates/mcp-model-registry" } +mcp-acceleration-products = { version = "=1.0.17", path = "crates/mcp-acceleration-products" } # Testing mockall = "0.15" diff --git a/package.json b/package.json index 32628dd..73bfbd7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@contextstream/mcp-server", "mcpName": "io.github.contextstream/mcp-server", - "version": "1.0.16", + "version": "1.0.17", "description": "Verified npm launcher for the open-source ContextStream Rust MCP server", "type": "module", "license": "MIT", diff --git a/server.json b/server.json index 7c67a5f..2faa6d0 100644 --- a/server.json +++ b/server.json @@ -3,7 +3,7 @@ "name": "io.github.contextstream/mcp-server", "title": "ContextStream MCP Server", "description": "Project memory, semantic code search, and grounded agent context.", - "version": "1.0.16", + "version": "1.0.17", "repository": { "url": "https://github.com/contextstream/mcp-server", "source": "github" @@ -20,7 +20,7 @@ "registryType": "npm", "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@contextstream/mcp-server", - "version": "1.0.16", + "version": "1.0.17", "transport": { "type": "stdio" },