Skip to content

docs: sync docs/v0.2 to v0.2.3 + SEO improvements#509

Merged
raymondk merged 43 commits intodocs/v0.2from
temp/docs-v0.2-rebuild
Apr 17, 2026
Merged

docs: sync docs/v0.2 to v0.2.3 + SEO improvements#509
raymondk merged 43 commits intodocs/v0.2from
temp/docs-v0.2-rebuild

Conversation

@marc0olo
Copy link
Copy Markdown
Member

Summary

Why

The docs/v0.2 branch and v* tags both trigger publish-versioned-docs and deploy to the same /0.2/ folder. The branch was sitting behind the v0.2.3 tag; any push to it would have silently overwritten live docs with older content.

Test plan

  • CI builds the docs-site successfully for /0.2/
  • Verify /0.2/ on the live site reflects the SEO improvements (OG image, RSS feed link in footer, structured data in <head>)

marc0olo and others added 30 commits March 17, 2026 21:18
* docs: migrate hosting from GitHub Pages to IC asset canister

- Remove /icp-cli/ base prefix from astro config and version switcher
- Add IC asset canister config (icp.yaml, .ic-assets.json5, .well-known/ic-domains)
- Add docs-deploy.yml workflow to deploy docs-deployment branch to IC mainnet
- Update docs.yml to push built assets to docs-deployment instead of gh-pages
- Update VERSIONED_DOCS.md, CONTRIBUTING.md, and README with new deployment info

The docs-deployment branch has been bootstrapped from gh-pages (path rewrites
applied) and is already deployed to ak73b-maaaa-aaaad-qlbgq-cai.

* docs: update custom domain to cli.internetcomputer.org
- Only ignore .icp/cache (not all of .icp/) so canister ID mappings
  can be committed as intended for icp projects
- Remove outdated .icpdata ignore entry (no longer used)
- Ignore examples/*/.icp/ since this repo does not track canister IDs
  for the examples (neither local nor mainnet deployments)
- Commit docs-site/.icp/data/mappings/ic.ids.json (canister ID for docs)
- Restore cp in workflow (file is now in source control)
workflow_run does not fire for tag-triggered workflows, and GITHUB_TOKEN
pushes do not trigger other workflows. Use workflow_call instead:
docs.yml explicitly calls docs-deploy.yml after publish jobs complete.

The deploy job only runs when at least one publish job succeeded,
so PR builds (where all publish jobs are skipped) do not trigger a deploy.
…cs is skipped (#444)

GitHub auto-skips dependent jobs when any needed job is skipped, regardless
of the if: condition. Using always() prevents this while the explicit
failure/cancelled checks ensure we still don't deploy on errors.

On main branch pushes publish-versioned-docs is correctly skipped (no tag),
but without always() this caused deploy-to-ic to also be skipped.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…unused workflow_dispatch (#445)

- Pre-release tags (v*-*) and docs branches (docs/v*-*) now excluded at
  the trigger level, preventing beta releases from deploying to the docs site
- workflow_dispatch removed from docs.yml — publish jobs require push event
  so manual triggers only ran the build job, which was misleading.
  docs-deploy.yml retains workflow_dispatch for manual IC re-deploys.
Bumps [h3](https://github.com/h3js/h3) from 1.15.5 to 1.15.8.
- [Release notes](https://github.com/h3js/h3/releases)
- [Changelog](https://github.com/h3js/h3/blob/main/CHANGELOG.md)
- [Commits](h3js/h3@v1.15.5...v1.15.8)

---
updated-dependencies:
- dependency-name: h3
  dependency-version: 1.15.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat: add agent-friendly docs (llms.txt, markdown endpoints, agent signaling)

Implement the Agent-Friendly Documentation spec (agentdocsspec.com) to make
docs discoverable and consumable by AI agents.

* fix: use Node 22 in docs workflow for fs.globSync support

* fix: move root llms.txt deployment to publish-root-files

Root llms.txt is now copied from the latest version's folder on the
docs-deployment branch during publish-root-files, instead of being
deployed by publish-versioned-docs. This ensures root llms.txt stays
in sync when versions.json is bumped (which only triggers
publish-root-files, not publish-versioned-docs).

* feat: add version navigation to root llms.txt

Prepend version links to the root llms.txt during publish-root-files.
Only the root copy gets version navigation — versioned copies stay
static to avoid stale cross-references when new versions are released.

* docs: update VERSIONED_DOCS.md for agent-friendly docs and remove beta section

- Add agent-friendly docs section explaining llms.txt and .md endpoints
- Update deployment branch structure to show llms.txt and .md files
- Update workflow trigger table to mention llms.txt handling
- Remove outdated beta versions section (pre-release tags/branches are
  now excluded from the docs workflow)
Allows manually triggering the docs workflow from the GitHub Actions UI,
useful for deploying root files (e.g. llms.txt) without a code change.
* fix(docs): add cache headers for markdown endpoints and llms.txt

The agentdocsspec checker flagged missing cache headers on .md and .txt
files. Add Cache-Control: public, max-age=300 to match the HTML pages.

* fix(docs): move llms.txt directive earlier in page for agent discovery

The agentdocsspec checker flagged the llms.txt directive as "buried deep
(past 50%)" because the rehype plugin injected it into the Starlight
content area, after the header, nav, and sidebar.

Move the directive to the Banner component (top of <main>) and add a
<link rel="help"> in <head>. Remove the now-unused rehype plugin.

* feat(docs): include version in llms.txt title for versioned builds

When built with a versioned base path (e.g. /0.2/), the llms.txt title
now reads "ICP CLI Documentation (v0.2)" instead of the generic title.

* feat(docs): add IC skills registry link to llms.txt

Point agents to the skills discovery endpoint so they can find
and install specialized IC development skills (icp-cli, canister
security, ICRC ledger, etc.) alongside the documentation.
* feat(docs): add agent skills discovery instructions to llms.txt

Replace the single-line skills registry link with structured
instructions that tell agents how to discover, fetch, and prioritize
skills. Mirrors the pattern from dfinity/developer-docs.

* fix(docs): prefer locally loaded skills over registry fetch in llms.txt

Align llms.txt wording with icp-cli-templates AGENTS.md: instruct agents
to use skills already in their context before fetching from the registry.
* chore: cargo update

* chore: remove resolved vulnerability ignores from audit.toml

RUSTSEC-2026-0001 and RUSTSEC-2026-0037 are no longer blocking as the
affected crate versions have been upgraded to safe ones in Cargo.lock.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: upgrade winreg to 0.56.0

Resolves RUSTSEC-2026-0037 indirectly — winreg 0.56.0 updates
windows-sys to 0.61.2, which is required by the safe quinn-proto version.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: upgrade bollard to 0.20.2 and fix breaking API changes

Model types moved from `bollard::secret` to `bollard::models` in 0.20.2.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move agent signaling blockquote from Banner component to post-build
  injection right after <body>, placing it at ~12% of the document
  instead of >50% (past nav/sidebar). Addresses the "buried deep"
  warning from the agentdocsspec checker.

- Split the monolithic CLI reference (52K+ chars) into 63 per-command
  markdown endpoints under reference/cli/. Top-level commands are listed
  in llms.txt; subcommand files include linked navigation to siblings.
  Includes build-time validation for slug collisions, broken links, and
  format changes.

- Copy sitemap-index.xml to sitemap.xml so the agentdocsspec freshness
  check can discover it at the conventional path. Move agentDocs()
  integration after starlight() to ensure sitemap exists when the hook
  runs.
…466)

* fix: Network fails to start if a stale network descriptor is present

* changelog

* fmt

* fix: simplify stale descriptor cleanup and fix ordering

Clean port descriptor before project descriptor so the global resource
is freed first. Pass gateway_port() directly since cleanup_port_descriptor
already handles None.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Linwei Shang <linwei.shang@dfinity.org>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Updated the link to the full documentation site.

Co-authored-by: Marco Walz <8124114+marc0olo@users.noreply.github.com>
* feat: Make internet identity available at id.ai.localhost

* refactor: Rename internet identity constants to match frontend canister

Rename INTERNET_IDENTITY_CID/INTERNET_IDENTITY_PRINCIPAL to
INTERNET_IDENTITY_FRONTEND_CID/INTERNET_IDENTITY_FRONTEND_PRINCIPAL
and update test references accordingly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Linwei Shang <linwei.shang@dfinity.org>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(docs): add Matomo analytics to documentation site

Add Matomo tracking to the docs site, matching the portal's setup
(cookies disabled, link tracking enabled, same Matomo Cloud instance).

The tracking script is deployed as a single root-level file (`/matomo.js`)
rather than baked into each versioned build, so the site ID can be
updated without rebuilding existing versions.

> **TODO**: Replace `CHANGEME` in `docs-site/matomo.js` with the actual
> Matomo site ID once IT creates the site for `cli.internetcomputer.org`.

* chore(docs): set Matomo site ID to 21

* chore(docs): add cache headers for matomo.js
* fix(ci): make paths-filter negation patterns actually exclude files

The dorny/paths-filter default predicate-quantifier is 'some' (OR),
which means negation patterns like '!**.md' never exclude files already
matched by a positive pattern like '**'. Switch to 'every' (AND) so
docs-only changes correctly skip CI. Also bump to v4.0.1.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(ci): bump and pin all GitHub Actions to latest versions

Bump pinned actions to their latest releases and SHA-pin previously
unpinned actions to resolve node20 deprecation warnings.

- actions/checkout v4.3.0 → v6.0.2
- actions/setup-node v4.2.0 → v6.3.0
- actions/upload-artifact v4 → v7.0.0 (now SHA-pinned)
- actions/download-artifact v4 → v8.0.1 (now SHA-pinned)
- actions-rust-lang/setup-rust-toolchain v1.15.3 → v1.15.4
- actions-rust-lang/audit v1.2.6 → v1.2.7
- EmbarkStudios/cargo-deny-action v2.0.13 → v2.0.15
- taiki-e/install-action v2.67.3 → v2.70.2
- dfinity/setup-mops v1 → v1.4.1 (now SHA-pinned)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(ci): revert release.yml changes (autogenerated by dist)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(ci): regenerate release workflow with dist v0.31.0

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: exclude dist-workspace.toml from taplo formatting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: support creating canisters via a proxy canister

Add an optional `proxy` parameter to `CreateOperation::new()`. When
provided, canister creation is routed through the proxy canister's
`proxy` method instead of calling the cycles ledger or management
canister directly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: replace proxy/subnet options with CreateTarget enum

Combine the mutually exclusive `proxy` and `subnet` parameters into a
single `CreateTarget` enum with `Subnet`, `Proxy`, and `None` variants.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add --proxy flag to `icp canister create`

Add a --proxy CLI argument that conflicts with --subnet. When provided,
canister creation is routed through the proxy canister.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add integration test for canister creation through proxy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: update changelog and CLI reference for --proxy flag

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…pes (#482)

* refactor: extract update_or_proxy_call to deduplicate proxy call logic

Move the proxy-or-direct update call dispatch into a shared
`operations::call::update_or_proxy_call` function, replacing the
duplicated proxy handling in `commands/canister/call.rs` and
`operations/create.rs`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: rename call module to proxy, add typed update_or_proxy helper

Rename operations/call.rs to operations/proxy.rs. Rename functions to
update_or_proxy_raw and update_or_proxy. Add a higher-level
update_or_proxy that accepts ArgumentEncoder/ArgumentDecoder for typed
Candid encoding/decoding. Refactor create_proxy to use the typed helper
with ic-management-canister-types (CreateCanisterArgs, CanisterIdRecord).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: replace local management canister types with ic-management-canister-types

Remove the `management_canister` module from `icp-canister-interfaces`
and use `CanisterSettings`, `CreateCanisterArgs`, `CanisterIdRecord`,
and `LogVisibility` from the `ic-management-canister-types` crate
instead. This eliminates duplicated type definitions and ensures
consistency with the upstream IC interface types.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: remove redundant local LogVisibility enum, use LogVisibilityDef directly

The local LogVisibility enum was a 1:1 mirror of
ic_management_canister_types::LogVisibility. Replace it with
LogVisibilityDef as the Settings field type and convert directly
to the IC management type, removing ~50 lines of boilerplate.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…483)

Removes [lodash](https://github.com/lodash/lodash). It's no longer used after updating ancestor dependency [@astrojs/language-server](https://github.com/withastro/astro/tree/HEAD/packages/language-tools/language-server). These dependencies need to be updated together.


Removes `lodash`

Updates `@astrojs/language-server` from 2.16.4 to 2.16.6
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/language-tools/language-server/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/language-server@2.16.6/packages/language-tools/language-server)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 
  dependency-type: indirect
- dependency-name: "@astrojs/language-server"
  dependency-version: 2.16.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro) from 5.16.11 to 5.18.1.
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/astro@5.18.1/packages/astro/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/astro@5.18.1/packages/astro)

---
updated-dependencies:
- dependency-name: astro
  dependency-version: 5.18.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
dependabot bot and others added 10 commits April 3, 2026 09:10
Bumps  and [picomatch](https://github.com/micromatch/picomatch). These dependencies needed to be updated together.

Updates `picomatch` from 4.0.3 to 4.0.4
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](micromatch/picomatch@4.0.3...4.0.4)

Updates `picomatch` from 2.3.1 to 2.3.2
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](micromatch/picomatch@4.0.3...4.0.4)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [smol-toml](https://github.com/squirrelchat/smol-toml) from 1.6.0 to 1.6.1.
- [Release notes](https://github.com/squirrelchat/smol-toml/releases)
- [Commits](squirrelchat/smol-toml@v1.6.0...v1.6.1)

---
updated-dependencies:
- dependency-name: smol-toml
  dependency-version: 1.6.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [h3](https://github.com/h3js/h3) from 1.15.8 to 1.15.9.
- [Release notes](https://github.com/h3js/h3/releases)
- [Changelog](https://github.com/h3js/h3/blob/v1.15.9/CHANGELOG.md)
- [Commits](h3js/h3@v1.15.8...v1.15.9)

---
updated-dependencies:
- dependency-name: h3
  dependency-version: 1.15.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: raymondk <raymond.khalife@dfinity.org>
Bumps [defu](https://github.com/unjs/defu) from 6.1.4 to 6.1.6.
- [Release notes](https://github.com/unjs/defu/releases)
- [Changelog](https://github.com/unjs/defu/blob/main/CHANGELOG.md)
- [Commits](unjs/defu@v6.1.4...v6.1.6)

---
updated-dependencies:
- dependency-name: defu
  dependency-version: 6.1.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.1 to 6.4.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.4.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.1.12 to 7.3.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.3.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* refactor: add proxy_management module with create_canister wrapper

Extract the proxied management canister create_canister call into a
dedicated proxy_management module, keeping raw IC types as the interface.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: route all management canister calls through proxy_management

Replace every `ManagementCanister::create` / `ic_utils` builder call
with the corresponding `proxy_management::*` wrapper that dispatches
via `update_or_proxy`. Each call site now accepts an optional proxy
principal, currently passed as `None`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: set effective_canister_id for direct management canister calls

Management canister calls routed through `update_or_proxy` were missing
the effective_canister_id, causing the IC HTTP endpoint to fail with
"canister_not_found" when routing the request. The old `ic_utils::ManagementCanister`
set this automatically; the new raw `agent.update()` path needs it explicitly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use Candid-encoded empty args for install_code default

When no init args are provided, the old ic_utils builder serialized
an empty Candid message (DIDL\x00\x00) via `Encode!()`. The refactored
code used `unwrap_or_default()` producing raw empty bytes, which the
management canister cannot parse as valid Candid.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use query call for direct fetch_canister_logs

fetch_canister_logs is a query method on the management canister, not an
update. When no proxy is provided, make a direct query call instead of
routing through update_or_proxy. Introduce FetchCanisterLogsError to
model the distinct direct-query and proxied-update error paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add --proxy flag to canister subcommands

Add a --proxy CLI flag to all `icp canister` subcommands that involve
management canister calls via proxy_management, allowing users to route
these calls through a proxy canister.

Commands updated: start, stop, delete, install, status, logs,
migrate-id, settings update, settings sync, snapshot create/restore/
list/delete.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: update changelog and CLI reference for --proxy flag

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add --proxy flag to icp deploy command

Route management canister calls through a proxy canister during deploy.
Includes a TODO for the known limitation where sync steps (asset uploads)
fail for newly created frontend canisters when using --proxy.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add integration tests for --proxy flag across canister commands

Cover deploy, install, delete, status, stop, start, settings update,
settings sync, and the full snapshot workflow through a proxy canister.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add ignored integration test for canister logs --proxy

fetch_canister_logs is not yet available in replicated mode, so hide the
--proxy flag from --help and mark the test as #[ignore] until the IC
spec change lands (dfinity/portal#6106).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: warn on effective controller removal in canister settings update

When --proxy is set, the proxy canister is the effective controller
making management calls. The self-removal warning now checks the proxy
principal instead of the caller's identity, preventing false prompts
(and "not a terminal" errors in tests) when adding controllers to
proxy-deployed canisters. Warning messages are also updated to be
accurate for each case.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat: add --proxy flag to snapshot download and upload commands

Thread proxy through all snapshot transfer operations so that
snapshot download/upload can be routed through a proxy canister.
Also extend the proxy workflow integration test to cover these commands.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: update CLI reference for snapshot download/upload --proxy flag

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add --args/--args-file/--args-format flags to `icp deploy`

Extract shared ArgsOpt struct and load_args helper into args.rs to
deduplicate init-args handling across canister install, canister call,
and deploy. CLI flags take priority over manifest init_args when
deploying a single canister.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: rename InitArgsFormat to ArgsFormat

The type is used for both canister install and call args, not just init args.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* chore: regenerate CLI docs and config schemas

Updates InitArgsFormat → ArgsFormat in JSON schemas and CLI reference docs.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* test: add tests for `icp deploy --args*` flags

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* chore: update changelog for deploy --args* flags

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* chore: tweak changelog wording for deploy --args* flags

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* docs: improve deploy command help and remove 'initialization' from args field descriptions

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* test: add test for CLI --args overriding manifest init_args

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* docs: fix --args-format example to use 'bin' instead of 'raw'

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…od, structured data (#508)

* feat(docs-site): add SEO improvements, OG image, RSS feed, and agent-friendly docs

- Generate og-image.png at build time from og-image.svg via @resvg/resvg-js
- Add JSON-LD structured data (WebSite + Organization schemas) to all pages
- Add og:image, og:image:alt, twitter:image, robots, and author meta tags
- Generate RSS 2.0 feed (feed.xml) with git-accurate publish dates per page
- Generate llms-full.txt for RAG pipeline ingestion
- Inject git-accurate <lastmod> dates into the Starlight-generated sitemap
- Add dynamic robots.txt generation in CI (blocks old versioned paths, /main/)
- Add root sitemap.xml index in CI pointing to latest version's sitemap
- Copy og-image.png, llms.txt, llms-full.txt, feed.xml from latest version to root in CI
- Add custom Footer component with RSS and llms.txt discovery links
- Update docs-site/README.md and task6-docs.md to reflect new build/deploy behavior

Closes #507

* feat(docs-site): add SEO improvements, OG image, RSS feed, and agent-friendly docs

- Generate og-image.png at build time from og-image.svg via @resvg/resvg-js
- Add JSON-LD structured data (WebSite + Organization schemas) to all pages
- Add og:image, og:image:alt, twitter:image, robots, and author meta tags
- Generate RSS 2.0 feed (feed.xml) with git-accurate publish dates per page
- Generate llms-full.txt for RAG pipeline ingestion
- Inject git-accurate <lastmod> dates into the Starlight-generated sitemap
- Add dynamic robots.txt generation in CI (blocks old versioned paths, /main/)
- Add root sitemap.xml index in CI pointing to latest version's sitemap
- Copy og-image.png, llms.txt, llms-full.txt, feed.xml from latest version to root in CI
- Add custom Footer component with RSS and llms.txt discovery links
- Update docs-site/README.md and task6-docs.md to reflect new build/deploy behavior

Closes #507

* fix(docs-site): address Copilot review feedback on SEO implementation

- Use root-absolute URLs for feed.xml and llms.txt in head links and Footer
  so feed readers and agents always discover the canonical root endpoint
- Use site: SITE (with fallback) instead of site: process.env.PUBLIC_SITE
  so siteUrl is always populated in the plugin during local builds
- Add fetch-depth: 0 to all three build job checkouts so git log returns
  accurate dates for sitemap lastmod and RSS pubDate
- Fix robots.txt contradictory Allow/Disallow /main/ when LATEST_VERSION=main
- Strip BOM from per-page .md files when concatenating llms-full.txt
- Memoize getGitDate() results to avoid redundant git log subprocesses
- Use root-absolute siteUrl for agent signaling directive href in HTML pages

* fix(docs-site): use canonical root URL for feed atom:self; simulate root files in test script

- Fix atom:link rel="self" in feed.xml to point to ${siteUrl}/feed.xml
  (canonical subscription URL) instead of the versioned path
- Update test-version-switcher.sh to simulate the publish-root-files CI step:
  copies llms.txt, llms-full.txt, feed.xml, og-image.png from the latest
  version folder to dist-test/ root, and generates robots.txt

* docs(docs-site): mention test-version-switcher.sh in README

* chore(docs-site): add test:versions npm script for version switcher testing

* fix(docs-site): generate root sitemap.xml in test:versions script

* fix(docs-site): point root sitemap.xml directly to sitemap-0.xml for spec compliance

* fix(docs-site): address second round of Copilot review feedback

- Replace execSync shell interpolation with spawnSync args array in getGitDate
  to avoid shell injection on unusual file paths
- Use date.slice(0, 10) for sitemap lastmod instead of toISOString() to avoid
  UTC conversion shifting the date for commits near midnight
- Strip trailing slash from SITE constant to prevent double slashes in URLs
- Clarify robots.txt comment: /main/ is conditionally disallowed, not always

* docs(docs-site): clarify robots.txt /main/ conditional behavior in README

* fix(docs-site): address third round of Copilot review feedback

- Use root-relative /feed.xml and /llms.txt for head discovery links and
  footer links so local/staging environments don't advertise production URLs;
  absolute URLs are kept only for og:image/twitter:image where required
- Replace CDATA with escapeXml() for RSS item descriptions to avoid invalid
  XML if a description contains the ]]> CDATA terminator sequence

* chore(docs-site): fix step numbering in astro-agent-docs build hook comments
@marc0olo marc0olo requested a review from a team as a code owner April 17, 2026 20:18
@marc0olo marc0olo changed the title docs(v0.2): rebuild from v0.2.3 + SEO improvements docs: sync docs/v0.2 to v0.2.3 + SEO improvements Apr 17, 2026
dependabot bot and others added 2 commits April 17, 2026 22:31
Bumps [rand](https://github.com/rust-random/rand) from 0.10.0 to 0.10.1.
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](rust-random/rand@0.10.0...0.10.1)

---
updated-dependencies:
- dependency-name: rand
  dependency-version: 0.10.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@raymondk raymondk merged commit 4691740 into docs/v0.2 Apr 17, 2026
87 checks passed
@raymondk raymondk deleted the temp/docs-v0.2-rebuild branch April 17, 2026 20:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants