Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ air-gapped signing
* `icp canister status` and `icp canister settings show` now list principals one per line under their label rather than comma-separated on the label's line: `log viewer:` / `status viewer: <principal>` for the allowed viewers of a visibility setting, `controller: <principal>` for a canister's controllers. This applies to `log_visibility` and to the controller list as well, so scripts matching those lines need updating. Both lists are sorted, which the controller list previously was not.
* `icp canister settings update` no longer lets a relative viewer edit silently revoke public access. `--add-log-viewer` / `--remove-log-viewer` and their `--*-status-viewer` counterparts are now rejected while that setting is `public`, which carries no allowed-viewers list for them to be relative to — previously they started one from empty, so adding a viewer to a public canister took access away from everyone else. The error points at `--set-*-viewer`, which states the new list outright, and at `--*-visibility controllers`, which revokes public access on its own. Both remain allowed and now warn about what they cost: replacing a `public` policy with a list, and removing the last viewer. This is breaking for the pre-existing log flags.
* This raises the minimum replica version: reading a canister's status now requires one that reports `status_visibility`, and against an older replica `canister_status` fails to decode — which affects `icp deploy`, `icp canister status`, and `icp canister settings show`/`sync`, not just the new setting. Every mainnet subnet reports it. A `managed` network resolves the launcher to `latest` unless it pins `version:`, so only a pinned launcher older than `15.0.0-2026-08-13-03-55` is affected; raise the pin to that version or later.
* feat: a new `snapshot_visibility` canister setting controls who may read the canister's snapshots — the `list_canister_snapshots`, `read_canister_snapshot_metadata`, and `read_canister_snapshot_data` endpoints behind `icp canister snapshot list` and `icp canister snapshot download`. It takes the same forms as `log_visibility` and `status_visibility` — `controllers` (the default), `public`, or `{ allowed_viewers: [...] }` — in a manifest's `settings:` block or with `icp canister settings update --snapshot-visibility / --add-snapshot-viewer / --remove-snapshot-viewer / --set-snapshot-viewer`, and follows the same rule that a relative viewer edit is refused while the setting is `public`. `icp canister status` and `icp canister settings show` now report it, it is applied at creation, and `icp canister settings sync` keeps it in sync. Taking, restoring, and deleting snapshots remains controller-only; the setting governs reading alone. See the [canister settings reference](docs/reference/canister-settings.md#snapshot_visibility).
* feat: `script` build steps now receive `ICP_CLI_ENVIRONMENT`, the name of the environment the canisters are being built for, so a build can vary by environment the way a sync step already could.
* feat: `icp completions <SHELL>` prints a shell completion script for `bash`, `zsh`, `fish`, `powershell`, or `elvish` to stdout. See the [installation guide](docs/guides/installation.md#shell-completions) for where to put it.
* fix(sync-plugin): Wasmtime is updated 47.0.3 → 47.0.4, patching two advisories in the runtime that executes `plugin` sync steps: a WASI filesystem sandbox escape when paths or symlinks carry trailing slashes ([RUSTSEC-2026-0269](https://rustsec.org/advisories/RUSTSEC-2026-0269)), and a guest-controlled host heap allocation through WASIp3 streams ([RUSTSEC-2026-0268](https://rustsec.org/advisories/RUSTSEC-2026-0268)). The escape is the one that bears on this crate: plugins run against directories preopened under the canister directory, and containing a symlink that escapes a preopen is the runtime's job rather than something the declared-path checks can cover. Lockfile-only — no manifest, API, or minimum-toolchain change.
* fix: canister settings from the manifest are no longer silently discarded when a canister is created through the legacy management-canister fallback (a CloudEngine subnet with no registered engine operator). That path went through `ic-utils`, which encodes `create_canister`'s argument as a bare `canister_settings` record rather than the `record { settings : opt canister_settings; ... }` the interface spec defines, so the replica read no settings at all and created the canister with defaults. `icp deploy` masked this by syncing settings afterwards; `icp canister create` does not, and left the canister unconfigured.
* fix: `icp canister logs` output formats are corrected. `--json` now emits machine-readable JSON and the default emits the human-readable lines (the two were swapped), and `--follow --json` emits newline-delimited JSON, one record per line, streamed as each record arrives. This is breaking for scripts: parsing the default output as JSON now requires `--json`, and consumers of `--follow --json` must read one JSON object per line.

Expand Down
Loading
Loading