Handbook
Granite — Fleet upgrade (SSH exception only)
When refreshing Forge Fleet on Granite, use the Fleet API first. SSH is allowed only to upgrade the Fleet daemon when the API cannot complete the update.
Updated
Preferred (no SSH)
From a maintainer workstation with Fleet credentials:
cd forge-fleet
./scripts/update-fleet.sh --remote-git-self-update
Or direct API (apt production hosts):
curl -sS -X POST "${FORGE_FLEET_BASE_URL}/v1/admin/upgrade" \
-H "Authorization: Bearer ${FORGE_FLEET_BEARER_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"mode":"upgrade"}'
SSH fallback (Fleet binary only)
Use SSH only when cooperative upgrade returns system_install_requires_root or the apt timer is inactive and the host operator must run the documented install script:
cd ~/forge-fleet && git pull --ff-only && ./update-user.sh
Do not use SSH for Market Studio deploy, data bundles, docker compose, volume copies, or Caddy edits. Those flows use Fleet migration and container-service APIs (see Granite Market Studio cutover).
See also Granite operator boundary.