diff --git a/.agents/upstream-tracking.md b/.agents/upstream-tracking.md index 8d425112..c6041407 100644 --- a/.agents/upstream-tracking.md +++ b/.agents/upstream-tracking.md @@ -51,7 +51,7 @@ Read the file at the **pinned** ref, not at `main`: ```bash # The pinned ref for each repo is in .sources/upstream.json -curl -sL https://raw.githubusercontent.com/dfinity/icp-cli/v1.1.0/docs/reference/cli.md +curl -sL https://raw.githubusercontent.com/dfinity/icp-cli/v1.4.0/docs/reference/cli.md ``` Use `raw.githubusercontent.com`, not `gh api .../contents/...`: the API returns @@ -133,11 +133,15 @@ is not a ref git can resolve. ### `icp-cli`: link slug adaptation -All CLI docs links use a versioned slug (`https://cli.internetcomputer.org/1.3/...`). +All CLI docs links use a versioned slug (`https://cli.internetcomputer.org/1.4/...`). When `icp-cli` moves to a new minor: -1. The slug is the `major.minor` of the release (`v1.3.0` → `1.3`). Confirm it is - live by opening the docs-site root, which redirects to the latest version. +1. The slug is the `major.minor` of the release (`v1.4.0` → `1.4`). Confirm it is + live in the published version list, where the entry marked `latest: true` is + the slug the docs site serves at its root: + ```bash + curl -sL --compressed https://cli.internetcomputer.org/versions.json + ``` 2. Verify every linked path and anchor resolves at the new slug **before** replacing. Check the live site, not a repo tree: that validates the published URL, its trailing-slash behaviour, and the anchor. @@ -151,12 +155,12 @@ When `icp-cli` moves to a new minor: ``` For deep links, also confirm the anchor exists: ```bash - curl -sL "https://cli.internetcomputer.org//reference/cli/" | grep -o 'id="icp-cycles"' + curl -sL --compressed "https://cli.internetcomputer.org//reference/cli/" | grep -o 'id="icp-cycles"' ``` 3. Replace the slug across all files (per-file loop, because GNU and BSD `sed` disagree on `-i`): ```bash - old=1.1; new=1.3 + old=1.3; new=1.4 grep -rl "cli.internetcomputer.org/${old}/" docs/ | while IFS= read -r f; do sed -i.bak "s|cli.internetcomputer.org/${old}/|cli.internetcomputer.org/${new}/|g" "$f" && rm -f "$f.bak" done diff --git a/.sources/upstream.json b/.sources/upstream.json index 454d8522..99786e6a 100644 --- a/.sources/upstream.json +++ b/.sources/upstream.json @@ -55,7 +55,7 @@ "watched": [ { "repo": "dfinity/icp-cli", - "pinned": "v1.3.0", + "pinned": "v1.4.0", "track": "release", "tagPattern": "^v\\d+\\.\\d+\\.\\d+$", "verify": "docs/reference/cli.md", diff --git a/AGENTS.md b/AGENTS.md index 1d9a3b7f..ca654961 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -174,7 +174,7 @@ EOF - Link to `internetcomputer.org/docs/` (retired) or `learn.internetcomputer.org` (content is now in this repo under `docs/concepts/`) - Link to internal pages that don't exist — run `ls ` before linking. Links to `.mdx` files use `.md` extension. - Link to an internal page without checking for a relevant section anchor — read the target page to find the most specific section that fits, then derive the anchor slug from its heading (lowercase, spaces → `-`, special chars stripped). -- Link to `https://cli.internetcomputer.org/` bare root — use the versioned path. Current slug: `1.3`. It is the `major.minor` of the latest icp-cli release, and the docs always track the latest. Do not read it from the repo's `docs-site/versions.json`: at a release tag that file still lists the *previous* slug, because the docs-site version bump lands as a follow-up commit after the tag. Confirm the live slug at the docs-site root (it redirects to the latest version), and see `.agents/upstream-tracking.md` for the full slug-bump procedure. +- Link to `https://cli.internetcomputer.org/` bare root — use the versioned path. Current slug: `1.4`. It is the `major.minor` of the latest icp-cli release, and the docs always track the latest. Do not read it from the repo's `docs-site/versions.json`: at a release tag that file still lists the *previous* slug, because the docs-site version bump lands as a follow-up commit after the tag. Confirm the live slug against the published `https://cli.internetcomputer.org/versions.json`, whose `latest: true` entry names it (the docs-site root reaches it through a meta refresh, which `curl -L` does not follow), and see `.agents/upstream-tracking.md` for the full slug-bump procedure. - Link externally when an internal page exists — check `docs/` first - Write em-dashes (`—`) or use `--` as prose punctuation — use colon, semicolon, or parentheses instead. (`--` is fine inside code blocks as a CLI flag or comment.) - Rename Candid field names, management canister API identifiers, or example repo names — these are protocol-level identifiers diff --git a/docs/developer-tools/index.md b/docs/developer-tools/index.md index 0d3d2afe..571a698b 100644 --- a/docs/developer-tools/index.md +++ b/docs/developer-tools/index.md @@ -18,13 +18,13 @@ Key features: - **Environments**: named deployment targets that combine a network, canister set, and settings (e.g., local, staging, production) - **Project scaffolding**: `icp new` bootstraps new projects from official templates -For installation, see the [Quickstart](../getting-started/quickstart.md) or the [full CLI documentation](https://cli.internetcomputer.org/1.3/). +For installation, see the [Quickstart](../getting-started/quickstart.md) or the [full CLI documentation](https://cli.internetcomputer.org/1.4/). To complete `icp` commands in your shell, `icp completions ` prints a script for bash, zsh, fish, elvish, or PowerShell; see [shell completions](https://cli.internetcomputer.org/1.4/guides/installation#shell-completions) for where to put it. -Advanced: [creating recipes](https://cli.internetcomputer.org/1.3/guides/creating-recipes) and [creating templates](https://cli.internetcomputer.org/1.3/guides/creating-templates) are documented on the CLI docs site. +Advanced: [creating recipes](https://cli.internetcomputer.org/1.4/guides/creating-recipes) and [creating templates](https://cli.internetcomputer.org/1.4/guides/creating-templates) are documented on the CLI docs site. icp-cli collects anonymous usage telemetry. Opt out with `icp settings telemetry false` or `DO_NOT_TRACK=1`. -Coming from dfx? See the [migration guide](https://cli.internetcomputer.org/1.3/migration/from-dfx). +Coming from dfx? See the [migration guide](https://cli.internetcomputer.org/1.4/migration/from-dfx). ### ic-wasm @@ -35,7 +35,7 @@ Resources: ### Quill -Quill is a minimalistic, offline-first CLI for signing and sending governance messages (NNS and SNS proposals, neuron management) from air-gapped machines. Unlike `icp-cli`, Quill is designed for cold wallet workflows: you generate signed messages on an offline device, then submit them from a networked machine. +Quill is a minimalistic, offline-first CLI for signing and sending governance messages (NNS and SNS proposals, neuron management) from air-gapped machines. Its focus is governance: for canister calls, icp-cli covers the same split with [`icp canister call --sign-only`](https://cli.internetcomputer.org/1.4/reference/cli#icp-canister-call), which writes a signed message on the offline device, and [`icp message send`](https://cli.internetcomputer.org/1.4/reference/cli#icp-message-send), which submits it from a networked one. That pair is experimental, so it can change between icp-cli releases. Quill is suited for: - Submitting NNS governance proposals diff --git a/docs/getting-started/project-structure.mdx b/docs/getting-started/project-structure.mdx index 61e3b455..b7daf074 100644 --- a/docs/getting-started/project-structure.mdx +++ b/docs/getting-started/project-structure.mdx @@ -72,7 +72,7 @@ Beyond canisters, `icp.yaml` can also define **networks** (where to deploy) and | `local` | `local` (managed, localhost:8000) | Local development | | `ic` | `ic` (connected, https://icp-api.io) | Mainnet production | -You only need to add custom networks or environments when you have staging environments, testnets, or other deployment targets. See the [icp-cli configuration reference](https://cli.internetcomputer.org/1.3/reference/configuration#networks) for the full schema. +You only need to add custom networks or environments when you have staging environments, testnets, or other deployment targets. See the [icp-cli configuration reference](https://cli.internetcomputer.org/1.4/reference/configuration#networks) for the full schema. ## Canister configuration (canister.yaml) @@ -155,7 +155,7 @@ icp project show This outputs the effective configuration, including all expanded recipe steps and implicit defaults. -Recipes are Handlebars templates hosted at [dfinity/icp-cli-recipes](https://github.com/dfinity/icp-cli-recipes). You can also create local or remote recipes for custom build patterns. See the [icp-cli recipes documentation](https://cli.internetcomputer.org/1.3/guides/creating-recipes) for details. +Recipes are Handlebars templates hosted at [dfinity/icp-cli-recipes](https://github.com/dfinity/icp-cli-recipes). You can also create local or remote recipes for custom build patterns. See the [icp-cli recipes documentation](https://cli.internetcomputer.org/1.4/guides/creating-recipes) for details. ## The .icp/ directory @@ -254,6 +254,6 @@ For a deep dive on binding generation, see [Binding generation](../guides/canist - [Binding generation](../guides/canister-calls/candid.md#binding-generation): deep dive on generating type-safe client code - [Asset canister](../guides/frontends/asset-canister.md): how the frontend recipe and asset upload work - [Canister lifecycle](../guides/canister-management/lifecycle.md): build, deploy, upgrade, and manage canisters -- [icp-cli reference](https://cli.internetcomputer.org/1.3/reference/cli): full CLI and configuration documentation +- [icp-cli reference](https://cli.internetcomputer.org/1.4/reference/cli): full CLI and configuration documentation {/* Upstream: informed by dfinity/icp-cli docs/concepts/project-model.md, docs/concepts/recipes.md, docs/concepts/binding-generation.md, docs/concepts/canister-discovery.md */} diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md index 9c4fc4a7..0996868f 100644 --- a/docs/getting-started/quickstart.md +++ b/docs/getting-started/quickstart.md @@ -37,7 +37,7 @@ icp --version ic-wasm --version ``` -> **Alternative methods:** [Homebrew, shell scripts, and other options](https://cli.internetcomputer.org/1.3/guides/installation) are also available. +> **Alternative methods:** [Homebrew, shell scripts, and other options](https://cli.internetcomputer.org/1.4/guides/installation) are also available. ## Create a project @@ -127,6 +127,6 @@ Each canister name maps to a directory containing its own `canister.yaml` with b - [Choose your path](choose-your-path.md): pick a development path based on what you want to build - [Concepts: Canisters](../concepts/canisters.md): learn what canisters are and how they work - [AI coding agents](../guides/ai-coding-agents.md): use ICP skills to build on the Internet Computer with AI -- [icp-cli documentation](https://cli.internetcomputer.org/1.3/): full CLI reference and guides +- [icp-cli documentation](https://cli.internetcomputer.org/1.4/): full CLI reference and guides diff --git a/docs/guides/canister-calls/parallel-inter-canister-calls.mdx b/docs/guides/canister-calls/parallel-inter-canister-calls.mdx index 3ad65f8d..1ea08689 100644 --- a/docs/guides/canister-calls/parallel-inter-canister-calls.mdx +++ b/docs/guides/canister-calls/parallel-inter-canister-calls.mdx @@ -16,13 +16,13 @@ Parallel calls are most beneficial when the caller and callee are on **different -- [icp-cli](https://cli.internetcomputer.org/1.3/guides/installation) installed +- [icp-cli](https://cli.internetcomputer.org/1.4/guides/installation) installed - `mops` package manager with `core = "2.0.0"` in `mops.toml` -- [icp-cli](https://cli.internetcomputer.org/1.3/guides/installation) installed +- [icp-cli](https://cli.internetcomputer.org/1.4/guides/installation) installed - `ic-cdk = "0.19"` and `futures = "0.3"` in `Cargo.toml` diff --git a/docs/guides/canister-management/cycles-management.mdx b/docs/guides/canister-management/cycles-management.mdx index 8bb4a32f..3c628d53 100644 --- a/docs/guides/canister-management/cycles-management.mdx +++ b/docs/guides/canister-management/cycles-management.mdx @@ -61,7 +61,7 @@ icp cycles balance -n ic ## Checking canister cycle balances -Only controllers can view a canister's cycle balance via `icp canister status`. +By default, only controllers can view a canister's cycle balance via `icp canister status`. The [`status_visibility`](settings.md#status-visibility) setting can extend that to named principals or to anyone. ### Via icp-cli @@ -73,18 +73,42 @@ icp canister status backend -e ic icp canister status ryjl3-tyaaa-aaaaa-aaaba-cai -n ic ``` -Example output: +Example output for a canister you control, resolved by name on a local network. Cycle and memory figures differ on mainnet: ```text -Status: Running -Controllers: xxxxx-xxxxx-xxxxx-xxxxx-xxx -Memory allocation: 0 -Compute allocation: 0 -Freezing threshold: 2_592_000 -Balance: 9_811_813_913_485 Cycles +Canister Id: +Canister Name: backend +Canister Status Report: + Status: Running + Controllers: + controller: + Compute allocation: 0 + Memory allocation: 0 + Freezing threshold: 2_592_000 + Reserved cycles limit: 5_000_000_000_000 + Wasm memory limit: 3_221_225_472 + Wasm memory threshold: 0 + Log memory limit: 4_096 + Log visibility: Controllers + Snapshot visibility: Controllers + Status visibility: Controllers + Environment Variables: + Name: PUBLIC_CANISTER_ID:backend, Value: + Module hash: 0x25aad4fd1781bf1d1212b9cde388b973a0bd8da7063ff16fc66dfebc3942f46d + Memory size: 5_537_162 + Cycles: 1_498_736_384_244 + Reserved cycles: 0 + Idle cycles burned per day: 1_005_463_641 + Query stats: + Calls: 0 + Instructions: 0 + Req payload bytes: 0 + Res payload bytes: 0 ``` -The `Balance` line shows the current cycle balance. The `Freezing threshold` shows how many seconds of idle cycles the canister must retain before freezing (see [Freezing threshold](#freezing-threshold) below). +The `Cycles` line shows the current cycle balance. The `Freezing threshold` shows how many seconds of idle cycles the canister must retain before freezing (see [Freezing threshold](#freezing-threshold) below). + +A canister you do not control reports less: unless its `status_visibility` grants you access, you get its ID, controllers, and module hash from the state tree, without the cycle balance. ### Programmatically @@ -307,7 +331,7 @@ icp deploy -e staging icp deploy -e production ``` -Each environment maintains separate canister IDs. Mainnet IDs are stored in `.icp/data/mappings/.ids.json` and should be committed to version control. See [Managing environments](https://cli.internetcomputer.org/1.3/guides/managing-environments) for full configuration options. +Each environment maintains separate canister IDs. Mainnet IDs are stored in `.icp/data/mappings/.ids.json` and should be committed to version control. See [Managing environments](https://cli.internetcomputer.org/1.4/guides/managing-environments) for full configuration options. ## Production deployment checklist @@ -375,6 +399,6 @@ icp canister top-up backend --amount 1T -n ic - [Cycles ledger reference](../../references/system-canisters.md#cycles-ledger): Canister IDs and interface specification - [Calls with attached cycles](../canister-calls/inter-canister-calls.md#calls-with-attached-cycles): attach cycles to an inter-canister call and accept them in the callee - [Reproducible builds](reproducible-builds.md): Verify your WASM is trustworthy before deploying -- [icp-cli docs](https://cli.internetcomputer.org/1.3/reference/cli#icp-cycles): Full command reference for `icp cycles` and `icp canister top-up` +- [icp-cli docs](https://cli.internetcomputer.org/1.4/reference/cli#icp-cycles): Full command reference for `icp cycles` and `icp canister top-up` {/* Upstream: informed by dfinity/portal (docs/building-apps/canister-management/topping-up.mdx, docs/building-apps/getting-started/tokens-and-cycles.mdx; dfinity/icp-cli) docs/guides/deploying-to-mainnet.md, docs/guides/tokens-and-cycles.md, docs/guides/managing-environments.md; dfinity/icskills: skills/cycles-management/SKILL.md */} diff --git a/docs/guides/canister-management/lifecycle.mdx b/docs/guides/canister-management/lifecycle.mdx index fbc1fbc9..42e387c4 100644 --- a/docs/guides/canister-management/lifecycle.mdx +++ b/docs/guides/canister-management/lifecycle.mdx @@ -264,7 +264,7 @@ This is useful during development when you want a clean slate. The canister ID i Deleting permanently removes a canister from the network. The canister ID cannot be reused. -> **Note:** Canisters are like real estate on the IC. Creating them costs cycles. Instead of deleting a canister, consider reusing it in a different project. Check the [cli reference](https://cli.internetcomputer.org/1.3/concepts/project-model/#canister-ids) for more information. +> **Note:** Canisters are like real estate on the IC. Creating them costs cycles. Instead of deleting a canister, consider reusing it in a different project. Check the [cli reference](https://cli.internetcomputer.org/1.4/concepts/project-model/#canister-ids) for more information. 1. Stop the canister first: diff --git a/docs/guides/canister-management/logs.md b/docs/guides/canister-management/logs.md index 3473a698..7e2ed144 100644 --- a/docs/guides/canister-management/logs.md +++ b/docs/guides/canister-management/logs.md @@ -110,6 +110,8 @@ To output logs as JSON for programmatic processing: icp canister logs -e ic --json ``` +Combined with `--follow`, `--json` emits newline-delimited JSON, one record per line as it arrives. + ## Log visibility By default, only the canister's controllers can read its logs. You can make logs visible to everyone, or grant read access to specific principals. @@ -149,6 +151,8 @@ icp canister settings update -e ic \ --remove-log-viewer ``` +While log visibility is `public` there is no viewers list to be relative to, so `--add-log-viewer` and `--remove-log-viewer` are rejected. Use `--set-log-viewer` to state the list outright, or `--log-visibility controllers` to revoke public access. + ### Setting log visibility in icp.yaml You can configure log visibility per canister in `icp.yaml` so it is applied on every `icp deploy`: @@ -407,7 +411,7 @@ async fn main() -> Result<()> { - [Canister lifecycle](lifecycle.md): configure log visibility and memory limits when creating or deploying a canister - [Testing strategies](../testing/strategies.md): use canister logs as part of your debugging workflow -- [CLI reference: `icp canister logs`](https://cli.internetcomputer.org/1.3/reference/cli#icp-canister-logs): full command flags and options -- [CLI reference: `icp canister settings update`](https://cli.internetcomputer.org/1.3/reference/cli#icp-canister-settings-update): full command flags and options +- [CLI reference: `icp canister logs`](https://cli.internetcomputer.org/1.4/reference/cli#icp-canister-logs): full command flags and options +- [CLI reference: `icp canister settings update`](https://cli.internetcomputer.org/1.4/reference/cli#icp-canister-settings-update): full command flags and options diff --git a/docs/guides/canister-management/settings.mdx b/docs/guides/canister-management/settings.mdx index 139353e9..9c2ea2e5 100644 --- a/docs/guides/canister-management/settings.mdx +++ b/docs/guides/canister-management/settings.mdx @@ -7,7 +7,7 @@ sidebar: import { Tabs, TabItem } from '@astrojs/starlight/components'; -Every canister has settings that control its resource allocation, access control, and runtime behavior. Only a [controller](#controllers) of the canister can read or modify these settings. +Every canister has settings that control its resource allocation, access control, and runtime behavior. Only a [controller](#controllers) of the canister can modify them. Reading them follows [status visibility](#status-visibility), which is controller-only by default. This guide covers how to view, configure, and update canister settings using icp-cli, `icp.yaml`, and programmatic calls to the management canister. @@ -177,6 +177,7 @@ Controls who can fetch canister logs through the `fetch_canister_logs` managemen | Type | `controllers`, `public`, or `allowed_viewers` object | | Default | `controllers` | | icp.yaml key | `log_visibility` | +| Maximum `allowed_viewers` | 10 principals | ```yaml # Only controllers @@ -187,7 +188,7 @@ settings: settings: log_visibility: public -# Specific principals (e.g. a monitoring service or auditor identity) +# Specific principals, in addition to the controllers settings: log_visibility: allowed_viewers: @@ -213,23 +214,66 @@ settings: ### Snapshot visibility -Controls who can list and read canister snapshots through the management canister. +Controls who can list and read canister snapshots through the management canister. Taking, restoring, and deleting snapshots stays controller-only whatever this is set to. | Property | Value | |----------|-------| | Type | `controllers`, `public`, or `allowed_viewers` object | | Default | `controllers` | +| icp.yaml key | `snapshot_visibility` | +| Maximum `allowed_viewers` | 10 principals | -| Variant | Meaning | -|---------|---------| -| `controllers` (default) | Only controllers can list and read snapshots | -| `public` | Anyone can list and read snapshots | -| `allowed_viewers` | Specific principals can list and read snapshots | +```yaml +# Only controllers +settings: + snapshot_visibility: controllers + +# Anyone +settings: + snapshot_visibility: public + +# Specific principals, in addition to the controllers +settings: + snapshot_visibility: + allowed_viewers: + - "" +``` -:::note -Configuring `snapshot_visibility` via `icp.yaml` or CLI flags is not yet supported in icp-cli. Set it programmatically via the management canister: see [Updating settings programmatically](#updating-settings-programmatically). +:::caution +Reading a snapshot exposes the canister's full state: the Wasm module, Wasm memory, stable memory, certified variables, and the Wasm chunk store. Granting snapshot access is closer to handing out a state dump than to granting a read-only report. ::: +### Status visibility + +Controls who can read the canister's status through the management canister's `canister_status` endpoint: the running state, cycles balance, memory usage, and the settings themselves. + +| Property | Value | +|----------|-------| +| Type | `controllers`, `public`, or `allowed_viewers` object | +| Default | `controllers` | +| icp.yaml key | `status_visibility` | +| Maximum `allowed_viewers` | 10 principals | + +```yaml +# The canister's controllers (default) +settings: + status_visibility: controllers + +# Anyone +settings: + status_visibility: public + +# Specific principals, in addition to the controllers +settings: + status_visibility: + allowed_viewers: + - "" +``` + +Two callers are always allowed whatever this is set to: the canister itself, reading its own status, and the administrators of the subnet it runs on. For log and snapshot visibility, `controllers` is instead an exhaustive list. + +A caller that may not read the status still sees the canister's controllers and module hash, which the network publishes in the state tree and `icp canister status` falls back to. Granting status access grants no control over the canister. + ### Environment variables Key-value pairs accessible at runtime. Allow the same Wasm module to run with different configurations across environments. @@ -263,6 +307,8 @@ canisters: wasm_memory_threshold: 512mib log_visibility: controllers log_memory_limit: 2mib + snapshot_visibility: controllers + status_visibility: controllers environment_variables: ENV: "development" ``` @@ -315,6 +361,9 @@ icp canister settings update backend --wasm-memory-limit 3gib # Log visibility icp canister settings update backend --log-visibility public +# Status visibility, granted to specific principals instead of a fixed policy +icp canister settings update backend --set-status-viewer PRINCIPAL + # Multiple settings at once icp canister settings update backend \ --compute-allocation 10 \ @@ -328,9 +377,13 @@ For mainnet canisters, add `-e ` where `` is the name of your mainnet icp canister settings update backend -e ic --freezing-threshold 90d ``` +Each of the three visibility settings comes in two forms, where `` is `log`, `snapshot`, or `status`. A fixed policy is `---visibility`, which takes `controllers` or `public`. A list of principals is `--add--viewer`, `--set--viewer`, or `--remove--viewer`. One command cannot use both forms for the same setting. + +A viewer list is also relative to an existing one, so `--add--viewer` and `--remove--viewer` are rejected while that setting is `public`. To narrow a public setting, state the list outright with `--set--viewer`, or revoke public access with `---visibility controllers`. + Additional flags: `--reserved-cycles-limit`, `--wasm-memory-threshold`, `--log-memory-limit`, `--add-environment-variable`. Run `icp canister settings update --help` for the full list. -For the full list of CLI flags, see the [icp-cli reference](https://cli.internetcomputer.org/1.3/reference/cli#icp-canister-settings-update). +For the full list of CLI flags, see the [icp-cli reference](https://cli.internetcomputer.org/1.4/reference/cli#icp-canister-settings-update). ## Updating settings programmatically @@ -361,6 +414,11 @@ persistent actor Self { #public; #allowed_viewers : [Principal]; }; // controls who can list/read canister snapshots + status_visibility : ?{ + #controllers; + #public; + #allowed_viewers : [Principal]; + }; // controls who can read the canister status wasm_memory_limit : ?Nat; wasm_memory_threshold : ?Nat; environment_variables : ?[{name : Text; value : Text}]; @@ -387,6 +445,7 @@ persistent actor Self { reserved_cycles_limit = null; log_visibility = null; snapshot_visibility = null; + status_visibility = null; wasm_memory_limit = null; wasm_memory_threshold = null; environment_variables = null; diff --git a/docs/guides/canister-management/snapshots.md b/docs/guides/canister-management/snapshots.md index 1bec3f83..8d3520bd 100644 --- a/docs/guides/canister-management/snapshots.md +++ b/docs/guides/canister-management/snapshots.md @@ -7,7 +7,7 @@ sidebar: Canister snapshots capture the full state of a canister (its compiled Wasm module, Wasm heap memory, stable memory, certified variables, and chunk store) at a specific point in time. You can restore a canister to a snapshot to roll back after a failed upgrade, recover from data corruption, or transfer state to another canister. -Only controllers of a canister can create or restore snapshots. Up to 10 snapshots per canister can be stored on the network at a time. +Only controllers of a canister can create or restore snapshots. Listing and reading them follows the [`snapshot_visibility`](settings.md#snapshot-visibility) setting, which is controller-only by default. Up to 10 snapshots per canister can be stored on the network at a time. ## When to use snapshots @@ -181,6 +181,6 @@ icp canister status my-canister -e ic - [Canister lifecycle](lifecycle.md): Understand how snapshots fit into the upgrade workflow - [Canister migration](canister-migration.md): Complete guide for moving a canister to a different subnet using the snapshot transfer workflow - [Canister upgrades security](../security/canister-upgrades.md): Security considerations when using snapshot-based rollbacks -- [icp-cli canister snapshot reference](https://cli.internetcomputer.org/1.3/guides/canister-snapshots): Full command reference for all snapshot subcommands +- [icp-cli canister snapshot reference](https://cli.internetcomputer.org/1.4/guides/canister-snapshots): Full command reference for all snapshot subcommands diff --git a/docs/guides/digital-assets/ledgers.mdx b/docs/guides/digital-assets/ledgers.mdx index 967cce16..103be2d4 100644 --- a/docs/guides/digital-assets/ledgers.mdx +++ b/docs/guides/digital-assets/ledgers.mdx @@ -252,7 +252,7 @@ ICRC-2 adds an approve/transferFrom pattern. The asset owner first approves a sp **When to use:** Exchange logic, payment processing, subscription services, or any case where a canister needs to pull assets from a user's account. -> To grant or inspect an allowance manually without writing code, use the [`icp token approve`](https://cli.internetcomputer.org/1.3/reference/cli#icp-token-approve) and [`icp token allowance`](https://cli.internetcomputer.org/1.3/reference/cli#icp-token-allowance) CLI commands. +> To grant or inspect an allowance manually without writing code, use the [`icp token approve`](https://cli.internetcomputer.org/1.4/reference/cli#icp-token-approve) and [`icp token allowance`](https://cli.internetcomputer.org/1.4/reference/cli#icp-token-allowance) CLI commands. diff --git a/docs/guides/frontends/frameworks.md b/docs/guides/frontends/frameworks.md index 46b83a6e..9c433733 100644 --- a/docs/guides/frontends/frameworks.md +++ b/docs/guides/frontends/frameworks.md @@ -11,7 +11,7 @@ This guide shows you how to configure your framework's build pipeline, wire up t ## Prerequisites -- [icp-cli](https://cli.internetcomputer.org/1.3/guides/installation) installed: `npm install -g @icp-sdk/icp-cli @icp-sdk/ic-wasm` +- [icp-cli](https://cli.internetcomputer.org/1.4/guides/installation) installed: `npm install -g @icp-sdk/icp-cli @icp-sdk/ic-wasm` - A backend canister deployed (or a static-only site with no backend) - Familiarity with [asset canisters](asset-canister.md) diff --git a/docs/guides/testing/pocket-ic.md b/docs/guides/testing/pocket-ic.md index a40e41e6..6c04c21e 100644 --- a/docs/guides/testing/pocket-ic.md +++ b/docs/guides/testing/pocket-ic.md @@ -377,7 +377,7 @@ PocketIC runs on macOS and Linux. Windows is not currently supported for standal ## Connecting to a running network for testing -For end-to-end tests that need a full network with all system canisters, use a containerized network instead of PocketIC. See the [icp-cli containerized networks documentation](https://cli.internetcomputer.org/1.3/guides/containerized-networks) for how to configure Docker-based test networks in `icp.yaml`. +For end-to-end tests that need a full network with all system canisters, use a containerized network instead of PocketIC. See the [icp-cli containerized networks documentation](https://cli.internetcomputer.org/1.4/guides/containerized-networks) for how to configure Docker-based test networks in `icp.yaml`. The containerized network is appropriate when: diff --git a/docs/guides/testing/strategies.md b/docs/guides/testing/strategies.md index 67f12767..3859ae0a 100644 --- a/docs/guides/testing/strategies.md +++ b/docs/guides/testing/strategies.md @@ -330,7 +330,7 @@ icp network status docker-test --json For the full containerized network configuration reference: including environment variables, volume mounts, and custom images: see the -[icp-cli containerized networks guide](https://cli.internetcomputer.org/1.3/guides/containerized-networks). +[icp-cli containerized networks guide](https://cli.internetcomputer.org/1.4/guides/containerized-networks). ## Choosing the right approach diff --git a/docs/index.mdx b/docs/index.mdx index ccecfa76..fe176a55 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -39,7 +39,7 @@ Teach your AI coding agent the patterns, APIs, and deployment workflows it needs ## External resources - +