Scion used to call its per-workspace grouping construct a “grove.” That name is being retired in
favor of “project” across the CLI, on-disk layout, hub/broker wire protocol, environment variables,
container labels, and the hub API. This page is the durable, running list of what changed and how
to migrate, organized by area. Each row below is added as the corresponding change merges; a
section with no rows yet means nothing in that area has changed yet.
Pods and containers created by scion releases before this rename, and hub/broker pairs on mixed
versions, are not supported. If you see stale behavior after upgrading, restart the affected
agents and make sure hub and broker are on the same release.
| Removed |
Replacement / action |
--project <gcp-id> on scion project service-accounts add and scion hub secret migrate |
--gcp-project <gcp-id>. --project/-g on these commands now selects the scion project, like everywhere else. |
--grove (global and on broker provide/withdraw, hub env *, hub secret *, hub token create/list, notifications *) |
--project / -g |
scion grove … |
scion project … (the group alias is unaffected) |
scion hub groves … / scion hub grove … |
scion hub projects … / scion hub project … |
scion config cd-grove |
scion config cd-project |
grove:<name> template-scope prefix and --template-scope grove |
project:<name>; --template-scope project |
scion config get/set grove_id, hub.grove_id, hub.groveId |
scion config get/set project_id, hub.project_id, hub.projectId |
grove_id field in scion project list --format json |
project_id |
groveId, groveName, groveType, grove, groves, grovePath keys in CLI JSON output (including scion list --format json) |
projectId, name (projectName on broker project entries), projectType, project, projects, projectPath |
| Removed |
Replacement / action |
env SCION_HUB_GROVE_ID (now ignored, with a warning) |
SCION_HUB_PROJECT_ID |
| Removed |
Replacement / action |
.scion/grove-id file |
migrated automatically to .scion/project-id. If the file is committed, commit the rename. |
grove-id/grove-name/grove-slug keys in .scion marker files; hub.grove_id in settings.yaml |
migrated automatically to project-id/project-name/project-slug and hub.project_id. A project-level hub.grove_id now takes precedence over a global hub.project_id, as project settings normally do. On value conflicts the project-named key wins, and a .grove-migration.bak backup is written. |
~/.scion/groves/, ~/.scion/grove-configs/ |
moved automatically to ~/.scion/projects/ and ~/.scion/project-configs/, with symlinks left at the old paths. If both exist, scion warns and uses the project-named directory. Directories on another filesystem or owned by another user must be moved by hand (scion prints the command). |
| Removed |
Replacement / action |
listing agents whose pods/containers carry only scion.grove* labels (created before the rename) |
restart those agents |
env SCION_GROVE_ID, SCION_GROVE, SCION_GROVE_PATH inside agent containers (now ignored, with a warning) |
SCION_PROJECT_ID, SCION_PROJECT, SCION_PROJECT_PATH. Restart running agents. Update harness scripts that read the old names. |
container/pod labels scion.grove, scion.grove_id; annotation scion.grove_path |
scion.project, scion.project_id, scion.project_path. Update external tooling that filters on the old labels. Restart any agent created before the grove→project rename before upgrading. Its container carries only scion.grove* labels and is otherwise treated as unlabelled, so a same-named agent lookup in any project can match it. |
grove-named fields and the groveId query parameter on the hub-to-broker HTTP API (agent create/start/message/response, broker info, workspace upload) and the /api/v1/workspace/grove-upload broker route |
the project-named equivalents (projectId, projectPath, projectSlug, projects, projectName) and /api/v1/workspace/project-upload; upgrade hub and brokers together, mixed versions are unsupported |
groves/groveId fields in the hub↔broker heartbeat payload and the runtime-broker websocket control protocol (ConnectMessage, StreamOpenMessage) |
projects/projectId. Upgrade hub and brokers together; mixed versions are unsupported. |
| Removed |
Replacement / action |
broker error code global_grove_disabled |
global_project_disabled |
REST routes /api/v1/groves[/…] |
/api/v1/projects[/…] |
request fields groveId, grove_id on project register |
id |
request field / query param groveId on templates and notifications |
projectId |
hub accepted and stored unrecognized scope values on template create/clone, notification subscription-template create, and harness-config create/clone (e.g. the removed grove scope, or any other unrecognized value) |
rejected with 400 (echoing the rejected value); use global, project or user for templates and harness configs, project or agent for subscription templates |
harness-config update (PUT /api/v1/harness-configs/{id}) accepted scope, scopeId, ownerId, storagePath, storageUri and storageBucket from the request body |
update keeps the stored record’s scope, scope ID, owner and storage location, matching template updates |
pre-existing stored scope='grove' rows in templates, harness_configs and subscription_templates |
normalized to scope='project' automatically on hub boot; no action needed |
groveId (and groveName/grove on project records) in hub API responses for notifications, subscriptions, subscription templates, schedules, scheduled events, access tokens, messages, project providers, project sync state and agent session metrics |
projectId (name/slug where applicable). |
groveId in hub event payloads; metric attribute scope="grove" |
projectId; scope="project" (update dashboards and alerts) |
response fields groveId, groveName, grove, groves; source: "grove" on resolved secrets; token response groveId |
projectId, name, slug, projects; source: "project" |
legacy groveId key decoded into the hubclient request types (create agent, subscription, subscription template, template, clone template, token) |
projectId; these types no longer map groveId to ProjectID when decoded from JSON |
| Removed |
Replacement / action |
telemetry attributes scion.grove, scion.grove.id, scion.grove_id as identity keys |
scion.project, scion.project.id, scion.project_id. The old names are still stripped from user-supplied attributes. |
a2a-bridge groves: config key, SCION_GROVE_ID, /groves/… routes; fs-watcher --grove |
projects:, SCION_PROJECT_ID, /projects/…; --project. The bridge ignores groves: silently, so a config that uses only groves: starts with zero projects. Rename the key before upgrading. |
broker-inbound and chat-integration topics scion.grove.* |
scion.project.* (Telegram v1 route imports are converted automatically) |
| Removed |
Replacement / action |
- Settings Precedence — how environment variables like
SCION_HUB_PROJECT_ID rank against settings files.