From abcdb45b25460c0b6d4e95caa57647fd5148e357 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?batuhan=20i=C3=A7=C3=B6z?= Date: Sat, 24 Oct 2026 05:43:09 +0000 Subject: [PATCH 1/6] Describe team-private Spaces and on-demand share links --- content/(serve)/access.mdx | 13 ++++++++----- content/cli/spaces.mdx | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/content/(serve)/access.mdx b/content/(serve)/access.mdx index cce97d1..5095dd3 100644 --- a/content/(serve)/access.mdx +++ b/content/(serve)/access.mdx @@ -45,7 +45,7 @@ The **General access** card holds a segmented control with three options: | Option | What it does | | --- | --- | -| **Private** | "Only people listed below can open it." | +| **Private** | The owning team and people with another matching grant can open it. | | **Share link** | "The share link is the key. Anyone who has it can open it, no account needed." | | **Public** | "Anyone on the web can open it." | @@ -77,6 +77,10 @@ Use `version:` to open only one version. Branch previews need a `branch: Date: Sat, 24 Oct 2026 05:49:10 +0000 Subject: [PATCH 2/6] Align team access docs with team-private defaults --- content/(concepts)/spaces.mdx | 9 +++++---- content/(concepts)/teams.mdx | 9 ++++----- content/(serve)/access.mdx | 6 +++--- content/agents/mcp-server.mdx | 2 +- content/agents/skills.mdx | 2 +- content/cli/agents.mdx | 2 +- content/quickstart.mdx | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/content/(concepts)/spaces.mdx b/content/(concepts)/spaces.mdx index 0734f01..5bfa045 100644 --- a/content/(concepts)/spaces.mdx +++ b/content/(concepts)/spaces.mdx @@ -68,13 +68,14 @@ To move a Space to another team, run `sf spaces transfer --space docs`, o ## Access when you create one -A new Space starts at one of three presets. +A new Space starts at one of two presets. | Preset | Who can open the live site | | --- | --- | -| `private` | Only people you name | -| `team` | Everyone in the owning team | -| `public` | Anyone with the URL | +| `private` | The owning team, plus anyone you add | +| `public` | The owning team, plus anyone on the web | + +The API still accepts `team` and treats it as `private`. Set it on the request that creates the Space, with `sf publish --access public` or the `access` field on `createPublish` and [`createSpace`](/api/reference/spaces/createspace). Sending `access` together with a `spaceId` is a validation error, because the field only applies at creation. Omit it and the Space takes the owning team's default for new Spaces. diff --git a/content/(concepts)/teams.mdx b/content/(concepts)/teams.mdx index 5054c98..e9755b5 100644 --- a/content/(concepts)/teams.mdx +++ b/content/(concepts)/teams.mdx @@ -12,7 +12,7 @@ A team owns its Spaces, domains, API keys, and billing. Your role in that team c Free and Go allow only the owner. Adding another member needs [Plus](/billing#seats). - **Publish together.** Members can create Spaces, publish new versions, and roll back. The site stays with the team when a member leaves. -- **Keep access in one place.** Invite someone to the team to give them access to team-owned work at their role. Remove them to take that access away across the team's Spaces. Set the default access for each new Space to `team`, `private`, or `public`. +- **Keep access in one place.** Invite someone to the team to give them access to team-owned work at their role. Remove them to take that access away across the team's Spaces. Set the default access for each new Space to `private` or `public`. - **Separate routine work from administration.** Members can publish, while owners and admins manage invitations, domains, and billing. The [role table](#roles) shows the full boundary. ## What a team is @@ -101,11 +101,10 @@ To hand the team over, use **Team settings → Danger zone → Transfer ownershi | Preset | What a new Space gets | |---|---| -| `private` | No access grant at all. Only the team's own access reaches it | -| `team` | A grant named "Team", so everyone in the team can open it | -| `public` | A grant named "Public", so anyone with the URL can open it | +| `private` | Access for the owning team | +| `public` | Access for the owning team, plus view access for anyone on the web | -The default is `team`. From a terminal, `sf teams defaults` prints the current value and `sf teams defaults public` sets it. Per-Space access, share links, and passwords are covered in [access and share links](/access). +The default is `private`. The API still accepts `team` and treats it as `private`. From a terminal, `sf teams defaults` prints the current value and `sf teams defaults public` sets it. Per-Space access, share links, and passwords are covered in [access and share links](/access). ## Move a Space to another team diff --git a/content/(serve)/access.mdx b/content/(serve)/access.mdx index 5095dd3..0c48ba3 100644 --- a/content/(serve)/access.mdx +++ b/content/(serve)/access.mdx @@ -45,7 +45,7 @@ The **General access** card holds a segmented control with three options: | Option | What it does | | --- | --- | -| **Private** | The owning team and people with another matching grant can open it. | +| **Private** | "Your team and people you add can view it." | | **Share link** | "The share link is the key. Anyone who has it can open it, no account needed." | | **Public** | "Anyone on the web can open it." | @@ -79,7 +79,7 @@ Use `version:` to open only one version. Branch previews need a `branch:] [-p] [-l] [--force] | `-l, --list` | `false` | List bundled skill files without installing | | `--force` | `false` | Overwrite locally modified or unverified Spacefast skill files | -The skill is named `spacefast` everywhere. It tells the agent to reach for the MCP tools first, to publish once and then poll, and to report the live URL, the immutable version URL, and the access URL. +The skill is named `spacefast` everywhere. It tells the agent to reach for the MCP tools first, to publish once and then poll, and to report the live URL, the immutable version URL, and the access URL when the receipt includes one. ```bash sf skills diff --git a/content/quickstart.mdx b/content/quickstart.mdx index 2bb603f..2bfbc38 100644 --- a/content/quickstart.mdx +++ b/content/quickstart.mdx @@ -95,7 +95,7 @@ Don't want to install anything? Open the dashboard and drag a folder, a `.zip`, ## Next -Working with other people? If your Space is still anonymous, [claim it first](/anonymous-and-claim#claim-it). Signed-in publishes already belong to a team. Free and Go allow only the owner; adding another member needs [Plus](/billing#seats). Then [invite members](/teams#invite-someone) to publish and roll back together. Owners and admins can manage domains and invitations. Choose whether new Spaces start open to the team, private, or public in [team access settings](/teams#default-access-for-new-spaces). +Working with other people? If your Space is still anonymous, [claim it first](/anonymous-and-claim#claim-it). Signed-in publishes already belong to a team. Free and Go allow only the owner; adding another member needs [Plus](/billing#seats). Then [invite members](/teams#invite-someone) to publish and roll back together. Owners and admins can manage domains and invitations. Choose whether new Spaces start private to the team or public in [team access settings](/teams#default-access-for-new-spaces). From 4cc7a0f77f65f0a0f98e79d4691c28df42d5a746 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?batuhan=20i=C3=A7=C3=B6z?= Date: Sat, 24 Oct 2026 05:49:56 +0000 Subject: [PATCH 3/6] Drop team preset from CLI reference --- content/cli/publish.mdx | 2 +- content/cli/teams.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/cli/publish.mdx b/content/cli/publish.mdx index 4f06009..6acc6f9 100644 --- a/content/cli/publish.mdx +++ b/content/cli/publish.mdx @@ -41,7 +41,7 @@ These apply when the publish creates the Space. On an existing Space with `--tar | --- | --- | --- | | `-n, --name=` | none | Set the Space title | | `--slug=` | generated | Set the Space slug when creating a new Space. Fails with `space_selection_conflict` if a Space is already selected | -| `--access=private\|team\|public` | team default | Set initial root access when this publish creates a team-owned Space. Requires a login or `--token`, and fails with `space_selection_conflict` if a Space is already selected | +| `--access=private\|public` | team default | Set initial root access when this publish creates a team-owned Space. `team` is accepted as `private`. Requires a login or `--token`, and fails with `space_selection_conflict` if a Space is already selected | | `--hostname-scope=team\|global` | server default | Managed hostname scope for newly created Spaces | | `--spa=auto\|true\|false` | `auto` | Control single-page app fallback detection | | `--mode=website\|files` | `website` | Serve the Space as a website or as a raw file listing. Usually set in `sf.jsonc` | diff --git a/content/cli/teams.mdx b/content/cli/teams.mdx index 1ca1ebc..858a376 100644 --- a/content/cli/teams.mdx +++ b/content/cli/teams.mdx @@ -130,7 +130,7 @@ Shows or sets the access preset materialized for Spaces this team creates in the | Argument | Default | What it is | | --- | --- | --- | -| `[rootAccess]` | show only | Future Space preset: `private`, `team`, or `public` | +| `[rootAccess]` | show only | Future Space preset: `private` (owning team) or `public` (also anyone on the web). `team` is accepted as `private` | ### Flags From c8121eadfa9852e5a59aac6ca5968b9e8281d923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?batuhan=20i=C3=A7=C3=B6z?= Date: Sat, 24 Oct 2026 05:53:06 +0000 Subject: [PATCH 4/6] Align team defaults and regenerate the CLI command reference --- content/(concepts)/teams.mdx | 9 +- content/agents/mcp-server.mdx | 2 +- content/cli/publish.mdx | 2 +- content/cli/teams.mdx | 2 +- generated/cli/index.md | 856 ++++++++++++++++++++++++++-------- generated/manifest.json | 6 +- 6 files changed, 680 insertions(+), 197 deletions(-) diff --git a/content/(concepts)/teams.mdx b/content/(concepts)/teams.mdx index 5054c98..cc6242f 100644 --- a/content/(concepts)/teams.mdx +++ b/content/(concepts)/teams.mdx @@ -12,7 +12,7 @@ A team owns its Spaces, domains, API keys, and billing. Your role in that team c Free and Go allow only the owner. Adding another member needs [Plus](/billing#seats). - **Publish together.** Members can create Spaces, publish new versions, and roll back. The site stays with the team when a member leaves. -- **Keep access in one place.** Invite someone to the team to give them access to team-owned work at their role. Remove them to take that access away across the team's Spaces. Set the default access for each new Space to `team`, `private`, or `public`. +- **Keep access in one place.** Invite someone to the team to give them access to team-owned work at their role. Remove them to take that access away across the team's Spaces. Set the default access for each new Space to `private` or `public`. - **Separate routine work from administration.** Members can publish, while owners and admins manage invitations, domains, and billing. The [role table](#roles) shows the full boundary. ## What a team is @@ -101,11 +101,10 @@ To hand the team over, use **Team settings → Danger zone → Transfer ownershi | Preset | What a new Space gets | |---|---| -| `private` | No access grant at all. Only the team's own access reaches it | -| `team` | A grant named "Team", so everyone in the team can open it | -| `public` | A grant named "Public", so anyone with the URL can open it | +| `private` | Access for the owning team | +| `public` | Access for the owning team, plus view access for anyone on the web | -The default is `team`. From a terminal, `sf teams defaults` prints the current value and `sf teams defaults public` sets it. Per-Space access, share links, and passwords are covered in [access and share links](/access). +The default is `private`. The API accepts `team` as a legacy spelling of `private`. From a terminal, `sf teams defaults` prints the current value and `sf teams defaults public` sets it. Per-Space access, share links, and passwords are covered in [access and share links](/access). ## Move a Space to another team diff --git a/content/agents/mcp-server.mdx b/content/agents/mcp-server.mdx index 1928d84..20acdad 100644 --- a/content/agents/mcp-server.mdx +++ b/content/agents/mcp-server.mdx @@ -108,7 +108,7 @@ Point docs.example.com at this Space and tell me which DNS records to add. | `files` | array of 1 to 1000 | Inline files. Required on hosted. Each is `{ path, content, encoding }` with `encoding` one of `utf8` or `base64`, default `utf8` | | `spaceId` | string starting `spc_` | Update this Space. Omit to create one, or on local to use the Space linked to this workspace | | `teamId` | string | Destination team id or slug for a new Space. Send one after a `team_required` error | -| `access` | `private`, `team`, or `public` | Initial root access for a Space this publish creates. Invalid with `spaceId` | +| `access` | `private` or `public` | Initial root access for a Space this publish creates. Private admits the owning team; Public also admits anyone on the web. Invalid with `spaceId` | | `createNew` | boolean, default `false` | Local runtime only. Forces a separate Space. Invalid with `spaceId` | | `slug` | string, 2 to 55 | Slug for a new Space | | `title` | string, 1 to 255 | Title for a new Space | diff --git a/content/cli/publish.mdx b/content/cli/publish.mdx index 4f06009..23b64e7 100644 --- a/content/cli/publish.mdx +++ b/content/cli/publish.mdx @@ -41,7 +41,7 @@ These apply when the publish creates the Space. On an existing Space with `--tar | --- | --- | --- | | `-n, --name=` | none | Set the Space title | | `--slug=` | generated | Set the Space slug when creating a new Space. Fails with `space_selection_conflict` if a Space is already selected | -| `--access=private\|team\|public` | team default | Set initial root access when this publish creates a team-owned Space. Requires a login or `--token`, and fails with `space_selection_conflict` if a Space is already selected | +| `--access=private\|public` | team default | Set initial root access when this publish creates a team-owned Space. Private admits the owning team; Public also admits anyone on the web. Requires a login or `--token`, and fails with `space_selection_conflict` if a Space is already selected | | `--hostname-scope=team\|global` | server default | Managed hostname scope for newly created Spaces | | `--spa=auto\|true\|false` | `auto` | Control single-page app fallback detection | | `--mode=website\|files` | `website` | Serve the Space as a website or as a raw file listing. Usually set in `sf.jsonc` | diff --git a/content/cli/teams.mdx b/content/cli/teams.mdx index 1ca1ebc..2ed29f1 100644 --- a/content/cli/teams.mdx +++ b/content/cli/teams.mdx @@ -130,7 +130,7 @@ Shows or sets the access preset materialized for Spaces this team creates in the | Argument | Default | What it is | | --- | --- | --- | -| `[rootAccess]` | show only | Future Space preset: `private`, `team`, or `public` | +| `[rootAccess]` | show only | Future Space preset: `private` or `public` | ### Flags diff --git a/generated/cli/index.md b/generated/cli/index.md index 593cc42..72db23e 100644 --- a/generated/cli/index.md +++ b/generated/cli/index.md @@ -21,7 +21,7 @@ $ npm install -g spacefast $ sf COMMAND running command... $ sf (--version) -spacefast/0.6.0 +spacefast/0.8.1 $ sf --help [COMMAND] USAGE $ sf COMMAND @@ -49,7 +49,6 @@ GLOBAL FLAGS - [`sf access`](#sf-access) - [`sf access logout-all`](#sf-access-logout-all) -- [`sf access subteams`](#sf-access-subteams) - [`sf activity`](#sf-activity) - [`sf agents init [DIRECTORY]`](#sf-agents-init-directory) - [`sf analytics`](#sf-analytics) @@ -76,14 +75,18 @@ GLOBAL FLAGS - [`sf channels ls`](#sf-channels-ls) - [`sf channels set NAME`](#sf-channels-set-name) - [`sf comments`](#sf-comments) -- [`sf comments archive COMMENT`](#sf-comments-archive-comment) +- [`sf comments create`](#sf-comments-create) - [`sf comments export`](#sf-comments-export) - [`sf comments get COMMENT`](#sf-comments-get-comment) - [`sf comments list`](#sf-comments-list) +- [`sf comments mark-read COMMENT`](#sf-comments-mark-read-comment) +- [`sf comments react COMMENT EMOJI`](#sf-comments-react-comment-emoji) +- [`sf comments reopen COMMENT`](#sf-comments-reopen-comment) - [`sf comments reply COMMENT`](#sf-comments-reply-comment) +- [`sf comments resolve COMMENT`](#sf-comments-resolve-comment) - [`sf comments settings`](#sf-comments-settings) - [`sf comments settings set`](#sf-comments-settings-set) -- [`sf comments unarchive COMMENT`](#sf-comments-unarchive-comment) +- [`sf comments unreact COMMENT EMOJI`](#sf-comments-unreact-comment-emoji) - [`sf connectors`](#sf-connectors) - [`sf connectors add TARGET`](#sf-connectors-add-target) - [`sf connectors bind ROLE CONNECTION`](#sf-connectors-bind-role-connection) @@ -130,6 +133,9 @@ GLOBAL FLAGS - [`sf domains`](#sf-domains) - [`sf domains add HOSTNAME`](#sf-domains-add-hostname) - [`sf domains check DOMAIN`](#sf-domains-check-domain) +- [`sf domains contacts`](#sf-domains-contacts) +- [`sf domains contacts add`](#sf-domains-contacts-add) +- [`sf domains contacts ls`](#sf-domains-contacts-ls) - [`sf domains diagnostics DOMAIN`](#sf-domains-diagnostics-domain) - [`sf domains dns`](#sf-domains-dns) - [`sf domains dns add DOMAIN`](#sf-domains-dns-add-domain) @@ -138,11 +144,15 @@ GLOBAL FLAGS - [`sf domains dns export DOMAIN`](#sf-domains-dns-export-domain) - [`sf domains dns ls DOMAIN`](#sf-domains-dns-ls-domain) - [`sf domains dns refresh DOMAIN`](#sf-domains-dns-refresh-domain) +- [`sf domains dns replace DOMAIN`](#sf-domains-dns-replace-domain) - [`sf domains dns rm DOMAIN RECORD`](#sf-domains-dns-rm-domain-record) - [`sf domains dns update DOMAIN RECORD`](#sf-domains-dns-update-domain-record) - [`sf domains ls`](#sf-domains-ls) - [`sf domains nameservers DOMAIN`](#sf-domains-nameservers-domain) - [`sf domains nameservers set DOMAIN NAMESERVERS`](#sf-domains-nameservers-set-domain-nameservers) +- [`sf domains registration DOMAIN`](#sf-domains-registration-domain) +- [`sf domains registration purchase DOMAIN... [flags]`](#sf-domains-registration-purchase-domain-flags) +- [`sf domains registration renew DOMAIN`](#sf-domains-registration-renew-domain) - [`sf domains rm DOMAIN`](#sf-domains-rm-domain) - [`sf domains search [QUERY]`](#sf-domains-search-query) - [`sf domains update DOMAIN`](#sf-domains-update-domain) @@ -265,6 +275,7 @@ GLOBAL FLAGS - [`sf skills remove`](#sf-skills-remove) - [`sf skills status`](#sf-skills-status) - [`sf source archive`](#sf-source-archive) +- [`sf source availability`](#sf-source-availability) - [`sf source branch`](#sf-source-branch) - [`sf source cat PATH`](#sf-source-cat-path) - [`sf source commits apply`](#sf-source-commits-apply) @@ -415,38 +426,6 @@ EXAMPLES $ sf access logout-all --space docs ``` -## `sf access subteams` - -Manage Space subteam access. - -```text -USAGE - $ sf access subteams [--profile ] [-y] [--claim-token - ] [-o ] [--space ] [--subteam ... | --all-members] - -FLAGS - --all-members Restore access for all team members. - --subteam=... Subteam ID to grant access. Repeat for multiple groups. - -GLOBAL FLAGS - -y, --yes [env: SPACEFAST_YES] Skip confirmation prompts. - --api-url= [env: SPACEFAST_API_URL] Spacefast API base URL. - --json Format output as json. - --profile= [env: SPACEFAST_PROFILE] Named provider profile from `sf profiles`. - -DESCRIPTION - Manage Space subteam access. - - Show or set which Enterprise subteams can access a Space. Owners and admins retain access. - -EXAMPLES - $ sf access subteams --space docs - - $ sf access subteams --space docs --subteam subteam_example - - $ sf access subteams --space docs --all-members -``` - ## `sf activity` Show activity events. @@ -1287,7 +1266,7 @@ USAGE DESCRIPTION Manage comments. - List, export, and update persistent Space comments, and set where Comments run. + Read, start, reply to, react to, and resolve Space comment threads, and set where Comments run. EXAMPLES Manage comments. @@ -1295,17 +1274,21 @@ EXAMPLES $ sf comments ``` -## `sf comments archive COMMENT` +## `sf comments create` -Archive a comment. +Start a comment thread. ```text USAGE - $ sf comments archive COMMENT [--profile ] [-y] [--claim-token - ] [-o ] [--space ] + $ sf comments create --body [--profile ] [-y] + [-o ] [--space ] [--mention ...] [--page | --file ] + [--selector | ] [--lines ] [--version ] [--idempotency-key ] -ARGUMENTS - COMMENT Comment id, for example cmt_123. +FLAGS + --body= (required) What the comment says. + --idempotency-key= Stable key for safely retrying this comment. + --mention=... Teammate to notify, by email, name, or user ID. Repeat for more. + --version= Version ID, ref, or number to comment on. Defaults to the live version. GLOBAL FLAGS -y, --yes [env: SPACEFAST_YES] Skip confirmation prompts. @@ -1313,13 +1296,34 @@ GLOBAL FLAGS --json Format output as json. --profile= [env: SPACEFAST_PROFILE] Named provider profile from `sf profiles`. +ANCHOR FLAGS + --file= File path to comment on, for example src/app.js. + --lines= Line or range in --file, for example 7 or 7-14. + --page= Page path to comment on, for example /pricing. Defaults to /. + --selector= CSS selector of the element to pin the comment to. + DESCRIPTION - Archive a comment. + Start a comment thread. - Archive a comment thread. + Start a comment thread on a page, an element on a page, or a file. Threads land on the live version unless --version + picks another. EXAMPLES - $ sf comments archive cmt_123 + Comment on a whole page. + + $ sf comments create --page /pricing --body "The annual price is wrong." + + Pin a comment to an element. + + $ sf comments create --page / --selector "#hero-title" --body "Too long for mobile." + + Comment on lines of a file. + + $ sf comments create --file src/app.js --lines 7-14 --body "This loop never ends." + + Start a thread and notify a teammate. + + $ sf comments create --page /about.html --body "Can you check the photos?" --mention milo@example.com ``` ## `sf comments export` @@ -1329,14 +1333,14 @@ Export comments. ```text USAGE $ sf comments export [--profile ] [-y] [--claim-token - ] [-o ] [--space ] [--version ] [--format markdown|json] [--status open|archived] + ] [-o ] [--space ] [--version ] [--format markdown|json] [--status open|resolved] FLAGS --format=