From 465f190e89fab6273952b482efcd688c8bc9c47f Mon Sep 17 00:00:00 2001 From: escott- Date: Fri, 16 Oct 2026 12:25:58 -0700 Subject: [PATCH] chore(release): complete the MCP 1.0.25 changelog and bump rustls main already carries the 1.0.25 version bump and changelog (0a62197), never tagged or published. This adds the entries for e1c49e6 (scope alerts, the cross-project working set, related-project search, the scope-judging hooks and the project tool's add, remove and clear) and b0deb40 (compact search output keeps duplicate_count and duplicate_locations), corrects the fixtures bullet (the tests that needed neutral fixtures came from b0deb40, not from 1.0.24), and moves rustls from 0.23.45 to 0.23.46 in Cargo.lock: cargo audit and cargo deny failed on four rustls advisories published on 2026-10-14 (RUSTSEC-2026-0346 to 0349), all fixed in 0.23.46. No other dependency changes. Dependabot PRs #173 and #174 are left out. Checked on ovh-desktop against main e1c49e6 plus this change. The gate ran twice: the first run failed cargo audit and cargo deny on rustls 0.23.45 and passed everything else, so the tree below is the tree that was gated again. - cargo fmt --all --check - cargo clippy --locked --workspace --all-targets -- -D warnings - cargo test --locked --workspace --all-targets: 3304 passed, 0 failed, 21 ignored - account_connection_smoke: 9 tests - cargo audit --deny warnings (403 crates, no advisories) and cargo deny --locked check (advisories, bans, licenses and sources ok) - on a clean archive: release_contract metadata and resolve-version for tag v1.0.25, public_boundary, the four script tests, the adoption and grounding tests, npm test (6 passed) - the first gate's binary driven as a stateless Claude Code client and through the real hooks against a mock API that answers with the unit tests' shapes: 40 of 40 checks (scope_alerts and working_set in init and context, never deduplicated; a related folder is not a mismatch; the project tool's add, remove and clear; the related-project search pass; duplicate_count and duplicate_locations kept in compact output; PreToolUse loud outside and quiet inside the working set; PostToolUse recording an edit in another linked git checkout once, with source activity); the published 1.0.24 fails 32 of them - the coach text lengths the changelog states, measured on the built binaries: instructions 737 to 985, workflow 1331 to 1528, workflow_save 2054 to 2237, workflow_delete 518 unchanged Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: escott- --- CHANGELOG.md | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++-- Cargo.lock | 4 ++-- 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc3adab..552b2dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,46 @@ ## 1.0.25 +- Scope alerts you cannot miss. `init` and `context` now put a `scope_alerts` + array in the structured result as well as `[SCOPE_MISMATCH]` in the text, + because clients such as Claude Code hand the model only the structured part. + An alert covers a folder or repository that belongs to another project, + several projects claiming one repository, and a scope that is unresolved or + needs setup. It is rebuilt on every call and never deduplicated, so it stays + until the scope is fixed, and in the wire budget it is the last structured + field to be dropped (e1c49e6). +- Working set: a session has a primary project (the one bound to the working + folder) and related projects the same work touches. The server returns + `working_set` (primary, related, suggested) with `init` and `context`, shown + as a `[WORKING_SET]` line. A project joins as related when your message names + its checkout, when an edit lands in its checkout, or with + `project(action="working_set", add=[...])`; `remove=[...]` and `clear=true` + take projects out. A folder that belongs to a related project is cross-project + work, not a mismatch. The `project` tool's input schema gains `add`, `remove` + and `clear`; every earlier field and action is still accepted (e1c49e6). +- Search covers related projects: the primary project's results come first, + then a labelled `[RELATED_PROJECTS]` section (`related_project_results` in the + structured result) with up to 5 results from each of up to 3 related + projects, read within 2.5 seconds. The related list comes from a per-caller + cache that `init` and `context` fill (5 minutes) or one bounded API read, so it + works on the stateless hosted transport. To search one related project fully, + pass its `project_id` (e1c49e6). +- Hooks judge scope. PostToolUse notices an edit in another linked checkout, + records that project as related on the server and in a local per-session + copy, and tells the agent once per project. PreToolUse checks every + scope-sensitive ContextStream call: a project outside the working set, or + another workspace, gets `[SCOPE_MISMATCH]` with the exact fix, reads included; + the primary and related projects are quiet, and tickets stay quiet inside the + workspace. This replaces the generic "Scope alignment warning", which also + fired on deliberate cross-project writes. The managed rules and the prompt + reminders explain primary and related projects and the two notices (e1c49e6). +- Search keeps `duplicate_count` and `duplicate_locations` in compact output. + The API now folds identical chunks found at different paths into one result; + when the structured payload went over its budget the compact form kept only + an allowlist of metadata and dropped both fields. Compact output now keeps the + count and shows up to 5 `path:start-end` locations (then "+N more"), and the + text adds a line such as "identical chunk also in 5 other files: ...". + Uncompacted output is unchanged (b0deb40). - Agent Coach Kit: the `/coach` server instructions and the `workflow` and `workflow_save` descriptions now say when the kit applies. A host that adds the server by address (the pilot route) receives no skill file, so these @@ -24,8 +64,27 @@ boundary (repository only), and the review run sheet has the reviewer type the first case without choosing the plugin first, so the recording shows whether ChatGPT reaches for it unprompted (repository only). -- Test fixtures in the search tests use neutral paths and documentation UUIDs - again, which the public-boundary check had flagged since 1.0.24's search fix. +- Test fixtures in the compact-search tests use neutral paths and documentation + UUIDs (67a2f62); the public-boundary check had failed on `main` since those + tests were added (b0deb40). + +Who gets what: the scope alerts, the working set, the related-project search +and the project tool's new parameters reach hosted clients when the hosted +gateway runs this version, and need the ContextStream API that returns +`working_set` (live). The hook behaviour and the new rules text reach a machine +after `contextstream-mcp update` (the rules also need a rules refresh). The +coach text reaches ChatGPT and Codex with the hosted gateway; the kit and the +plugin package live in the repository and are not part of the npm package or +the binaries. + +Dependencies: `rustls`, the TLS library the client and the hosted gateway use, +moves from 0.23.45 to 0.23.46 in `Cargo.lock` for RUSTSEC-2026-0346 (`Debug` +output of client session values exposed TLS secrets), RUSTSEC-2026-0347 +(buffered application data sent after an ECH rejection), RUSTSEC-2026-0348 +(Brotli certificate decompression could allocate up to 1 GiB before +authentication) and RUSTSEC-2026-0349 (an unauthenticated ServerHello could +downgrade later connections to classical key exchange), all published on +2026-10-14. No other dependency changes. ## 1.0.24 diff --git a/Cargo.lock b/Cargo.lock index f8fc9a4..85cc745 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2528,9 +2528,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "once_cell", "ring",