Bump to 0.4.0 - #185
Merged
Merged
Conversation
A minor bump rather than a patch, because the served tool surface changed incompatibly since 0.3.0. Every tool that reaches a canister is now gated on the owning app's service-discoverability manifest (#184). `get_canister_candid`, `get_canister_api_doc`, `get_canister_oql_schema` and `canister_query` used to work on any canister; they reach one only when the app that owns it declares that canister at `/.well-known/ic-architecture`, exactly as `canister_update_call` already did. Each of the four grew an optional `app_url` naming the app whose manifest decides, and every successful reply echoes `declared_by`/`declared_at`. A client that read an undeclared canister against 0.3.0 gets a refusal here. `open_app` moved with it: it probes only declared canisters for their oql/api-doc flags, so a candidate mined from `/env.json` or the JS bundle comes back with null flags and without the `[declared]` marker, and the server instructions no longer promise that reading is ungated. No public Rust item changed — the gate lives in the private `discover` and `discoverability` modules — so an embedder still compiles against 0.4.0 unchanged. What changed is what its server answers, which is the part its own users see. Under cargo's 0.x rules `0.3` is the compatibility range, so shipping this as 0.3.1 would hand that break to everyone on `imcp2 = "0.3"` — the requirement our own README recommends — the next time they ran `cargo update`. 0.4.0 opens a new range instead; existing users stay on 0.3.x until they choose to move. The README's dependency line follows, as `"0.3"` would no longer resolve to a current release. The other two changes since 0.3.0 are the status dashboard's landing-page check (#181) and the operator-facing terms references (#182); neither touches the crate. `imcp2-core` moves in lockstep: publish-crate.yml checks the tag against both manifests, and the workspace pin that binds them (`imcp2-core = { path = …, version = … }`) has to name the same number or the path dependency stops resolving. `imcp2-local` moves with them — it releases on its own `imcp2-local-…` version tags and has never been cut, so there is nothing to keep it behind, and its `--version` output would otherwise report 0.3.0 from a 0.4.0 tree. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
🟢 Approval recommended
The version bump is complete and consistent across manifests, lockfile, dependency pin, and documentation.
Pull request overview
Bumps all workspace crates to 0.4.0 for the incompatible tool-surface changes since 0.3.0.
Changes:
- Updates all crate versions and the shared dependency pin.
- Refreshes the lockfile and README dependency example.
File summaries
| File | Description |
|---|---|
Cargo.toml |
Bumps imcp2 and the core dependency pin. |
Cargo.lock |
Synchronizes workspace package versions. |
crates/imcp2-core/Cargo.toml |
Bumps imcp2-core. |
crates/imcp2-local/Cargo.toml |
Bumps imcp2-local. |
README.md |
Recommends the new compatibility range. |
Review details
- Files reviewed: 4/5 changed files
- Comments generated: 0
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
aterga
approved these changes
Sep 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A minor bump rather than a patch, because the served tool surface changed
incompatibly since 0.3.0.
Every tool that reaches a canister is now gated on the owning app's
service-discoverability manifest (#184).
get_canister_candid,get_canister_api_doc,get_canister_oql_schemaandcanister_queryused towork on any canister; they reach one only when the app that owns it declares
that canister at
/.well-known/ic-architecture, exactly ascanister_update_callalready did. Each of the four grew an optionalapp_urlnaming the app whose manifest decides, and every successful reply echoes
declared_by/declared_at. A client that read an undeclared canister against0.3.0 gets a refusal here.
open_appmoved with it: it probes only declared canisters for theiroql/api-doc flags, so a candidate mined from
/env.jsonor the JS bundle comesback with null flags and without the
[declared]marker, and the serverinstructions no longer promise that reading is ungated.
No public Rust item changed — the gate lives in the private
discoveranddiscoverabilitymodules — so an embedder still compiles against 0.4.0unchanged. What changed is what its server answers, which is the part its own
users see.
Under cargo's 0.x rules
0.3is the compatibility range, so shipping this as0.3.1 would hand that break to everyone on
imcp2 = "0.3"— the requirementour own README recommends — the next time they ran
cargo update. 0.4.0 opens anew range instead; existing users stay on 0.3.x until they choose to move. The
README's dependency line follows, as
"0.3"would no longer resolve to acurrent release.
The other two changes since 0.3.0 are the status dashboard's landing-page check
(#181) and the operator-facing terms references (#182); neither touches the
crate.
imcp2-coremoves in lockstep: publish-crate.yml checks the tag against bothmanifests, and the workspace pin that binds them (
imcp2-core = { path = …, version = … }) has to name the same number or the path dependency stopsresolving.
imcp2-localmoves with them — it releases on its ownimcp2-local-…version tags and has never been cut, so there is nothing to keepit behind, and its
--versionoutput would otherwise report 0.3.0 from a 0.4.0tree.
🤖 Generated with Claude Code