You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 5cd49eb
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: DOCS_TEST_SUITE.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,11 +16,13 @@ CI runs `test:docs` after the production build. It uses Node's test runner and e
16
16
- Authored pages open with a subject or action instead of the repeated “After this page…” promise.
17
17
- The homepage and Quickstart offer dashboard Drop before CLI installation, and the linked Publishing page describes the Drop flow.
18
18
- The homepage links to a glossary that defines its recurring product terms.
19
-
- Database explains how to enable Zero before it teaches queries.
19
+
- Database links the full Zero runtime declaration and names its required server file before teaching queries.
20
20
- Troubleshooting gives readers a first diagnostic step before listing error codes.
21
21
- The opening paragraphs on Versions, Crons, Environment variables, Access, Caching, and Traffic stats answer specific reader questions. Each test names the question and the evidence expected near the top of the built page.
22
22
23
-
These are regression contracts for the changed entry paths and first-screen explanations. They make a future edit fail if it hides those answers again. They do not grade tone, prove that shorter text is clearer, or measure whether a person can complete a real task. Those claims need editorial review and reader testing.
23
+
These are regression contracts for the changed entry paths and first-screen explanations. They make a future edit fail if it hides those answers again. They do not prove product behavior, grade tone, prove that shorter text is clearer, or measure whether a person can complete a real task. Check each expected answer against the public contract and the page's exceptions before encoding it in a test.
24
+
25
+
The October 6 review corrected assertions that reinforced overbroad access and traffic claims. The checks now distinguish views from requests and unique visitors, retained ready versions from other versions, and removal of one public grant from removal of all access. Cache refresh is a request, not an unconditional freshness guarantee.
Copy file name to clipboardExpand all lines: DOCS_WRITING_QA.md
+45-2Lines changed: 45 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Authored-docs writing audit
2
2
3
-
The reviewer click-path and command comparisons in [DOCS_QA_COMPARISON.md](DOCS_QA_COMPARISON.md) measure answer findability and factual accuracy. Neither measures whether the authored prose is better for readers. This point-in-time audit checks the writing changes against `main` as of October 5, 2026. Repeatable checks for the current docs are in [DOCS_TEST_SUITE.md](DOCS_TEST_SUITE.md).
3
+
The October 5 audit below measured structure and wording, but missed factual overstatements. Its candidate examples are historical, not verified guidance. The [October 6 semantic review](#semantic-review-october-6-2026) records the corrections and their evidence. Repeatable checks for the current docs are in [DOCS_TEST_SUITE.md](DOCS_TEST_SUITE.md).
4
4
5
5
## Method
6
6
@@ -29,7 +29,7 @@ The edited leads now put several useful answers before the reader has to scan th
29
29
| Caching | How do I force a fresh response? | Promises to explain cache behavior | Says republishing forces one |
30
30
| Traffic stats | Are crawlers included? | Promises to explain counts | Says crawler traffic is excluded |
31
31
32
-
These rows are illustrative checks of what the opening now tells a reader, not an independent six-question success rate. The underlying facts and the full procedures remain on the pages.
32
+
These rows record what the candidate openings claimed at the time, not an independent six-question success rate. Review later found that several claims dropped necessary qualifications, including the caching and traffic examples.
33
33
34
34
For example, Versions opened with “After this page you know what a version holds, how it reaches `ready`, how the `live` pointer moves, and how to roll back to any earlier version in seconds.” It now opens with “A rollback doesn't rebuild anything — it just repoints `live` at a version that already exists, which is why it takes seconds, not minutes.” The new sentence answers the likely rollback question; the page still explains version states below it.
35
35
@@ -38,3 +38,46 @@ For example, Versions opened with “After this page you know what a version hol
38
38
The manual review caught five candidate leads that were shorter but spent the first sentence on a less useful detail: slug validation on Spaces, polling mechanics on Logs, archive flags on Frameworks and builds, CLI naming on Publish from Git, and remote WP-CLI output on WordPress. Each now leads with the page's main task or mental model. The removed detail was checked elsewhere on the same page and retained or moved into the body.
39
39
40
40
This audit establishes changes in structure and in which facts appear first. It does not show that real readers complete tasks faster or understand the docs better. Shorter openings could also lose useful context for some readers. That requires reader testing. Vale now passes after two existing technical plurals (`GETs` and `TTYs`) were written as plain explanations; its rules do not detect repeated sentence structures or judge whether a page leads with the right fact.
41
+
42
+
## Semantic review, October 6, 2026
43
+
44
+
Reviewed every changed MDX hunk in the PR: 78 existing pages plus the new glossary. Compared each rewrite with its original wording, then checked broader claims against the relevant procedures, exceptions, sibling guides, and producer-owned public reference snapshot. This was a documentation consistency audit, not a live product test or a reread of every unchanged paragraph.
45
+
46
+
The first review fixed eight findings covering stats, caching, routing, anonymous key recovery, Zero pricing, hosted MCP authentication, team plan limits, and Zero setup. The follow-up applied the same reasoning across the full rewrite and corrected related claims at other entry points.
47
+
48
+
| Claim family | Correction | Evidence checked |
49
+
| --- | --- | --- |
50
+
| Retry safety | Name the key, matching request scope, 24-hour replay window, and unstored outcomes that execute again |`content/api/idempotency.mdx`, Send a key / What is not stored |
51
+
| Pagination | Limit the common cursor model to endpoints that use it; retain endpoint defaults, ordering, offset paging, and unpaginated lists |`generated/openapi/api.json`: `searchDocs`, `listSpaceStorageObjects`, `listSpaceDomains`|
52
+
| Publish and rollback | Preserve no-op publishes, ready/retained targets, manual promotion, and preview behavior | Public reference: `createSpaceVersion`, `promoteSpaceVersion`; `content/(concepts)/versions.mdx`; `content/(publish)/ci.mdx`|
53
+
| URL lifetime | Separate a stable version URL from retained files; distinguish domain attachment from slug rename |`content/(concepts)/spaces.mdx`, Renaming; `content/cli/versions.mdx`, sf versions rm |
54
+
| Access | Revoking one matching grant does not revoke other grants or the team's permissions |`content/(serve)/access.mdx`, scoped grants; `content/(concepts)/teams.mdx`, role and default-access tables |
55
+
| Runtime setup | Scope auto-detection to Functions layouts; preserve the Zero declaration and the Functions database alternative |`content/(dynamic)/functions.mdx`, Where the code lives / Declare it; `content/cli/db.mdx`|
56
+
| Variables and logs | A queued re-finalize can apply variables; logs have retention, ingestion delay, and static-runtime limits |`content/(dynamic)/environment-variables.mdx`; `content/(dynamic)/logs.mdx`; `listSpaceRuntimeLogs`|
57
+
| Archives and Git | Preserve prebuilt archives, branch auto-deploy controls, and the GitHub App prerequisite |`generated/cli/index.md`, sf publish `--prebuilt`; `content/(publish)/git.mdx`; `content/cli/git.mdx`|
58
+
| CLI helpers | Linking selects a Space rather than removing all publish options; apply and continuation helpers mutate state; continuation needs claim approval |`content/cli/project.mdx`; `content/cli/agent-commands.mdx`; `content/(publish)/anonymous-and-claim.mdx`|
59
+
| WP-CLI and storage | Remote WP-CLI returns no printed output, even for read commands; object IDs do not replace read keys |`content/(dynamic)/wordpress.mdx`, Local versus remote; `content/(dynamic)/storage.mdx`, returned URL |
| Ownership and billing | Distinguish self-serve teams from partner customer ownership; billing reads differ from plan changes; key rotation depends on switching consumers first |`createSpace` public reference; `content/platforms/partner-api/customers.mdx`; `content/(account)/billing.mdx`; `content/(account)/api-keys.mdx`|
62
+
| Cache and schedule application | Repeat public-cache exceptions in troubleshooting; crons follow the live version |`content/(serve)/caching.mdx`; `listSpaceCrons` public reference |
63
+
| Sentence splitting | Limit missing generated CSS to the dynamic class instead of declaring the whole app unstyled |`content/(dynamic)/zero-runtime.mdx`, Styling |
The style guide and contributor instructions now require this meaning check. Existing built-output assertions were updated where they reinforced a misleading claim. No new regex suite is presented as independent proof of product behavior. Generated references remain producer-owned and unchanged. The previously recorded support-contact and API-key preset gaps remain outside these corrections.
82
+
83
+
Verification with Bun 1.3.11 and Node 24 passed: frozen dependency install, generated-reference and command-example checks, type check, strict link validation, production build, all 26 docs tests, composed-site audit, public-safety check, Vale, route verification, and `git diff --check`.
Copy file name to clipboardExpand all lines: content/(account)/api-keys.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@ sidebar:
5
5
order: 2
6
6
---
7
7
8
-
You can mint a scoped API key with exactly the permissions it needs, then rotate it without taking anything down.
8
+
Team owners and admins can mint scoped API keys. To rotate without interrupting an integration, create a replacement, switch the integration to it, verify a request, and only then revoke the old key.
Copy file name to clipboardExpand all lines: content/(account)/billing.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -86,6 +86,6 @@ Reading is never blocked in either state. Settle the payment from the billing po
86
86
87
87
## Billing is dashboard-only
88
88
89
-
Plans, checkout, and cancellation live in the dashboard. There is no `sf` command and no API endpoint for changing a plan. API keys and agent credentials cannot reach billing at all.
89
+
Plans, checkout, and cancellation live in the dashboard. There is no `sf` command and no API endpoint for changing a plan. API keys and agent credentials cannot make those changes.
90
90
91
91
Reading is a different story. An agent can pull the resolved plan and limits from `GET /v1/teams/{teamId}/entitlements`, current counters from `GET /v1/teams/{teamId}/usage`, and the limits as they are enforced at publish time from `GET /v1/teams/{teamId}/plan-policy`. See [Usage](/usage) for what those numbers mean.
Copy file name to clipboardExpand all lines: content/(concepts)/spaces.mdx
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ A Space is one site with a stable hostname. Publishing creates versions inside i
9
9
10
10
## What a Space is
11
11
12
-
A Space is one site. It owns a slug, a hostname, an owner, and one pointer that says which version visitors get. Everything you publish lands in a Space as a new immutable version, and the Space decides which of them is live.
12
+
A Space is one site. It owns a slug, a hostname, an owner, and one pointer that says which version visitors get. A publish can create a new immutable version or report no changes, and the Space decides which version is live.
13
13
14
14
Ids are `spc_` plus 32 hex characters:
15
15
@@ -54,14 +54,15 @@ Check before you commit with [`getSlugAvailability`](/api/reference/spaces/getsl
54
54
55
55
## The default hostname
56
56
57
-
Every Space answers at `https://<slug>.view.fast/` from the moment it exists, and keeps that hostname for life. Adding a custom domain never retires it. Version and branch hostnames, the live URL rule, and what a rename does to each are on [URLs and hostnames](/urls).
57
+
A Space gets a default `view.fast` hostname. Adding a custom domain leaves it in place; renaming the slug moves the default hostname and redirects the old one. Version and branch hostnames, the live URL rule, and what a rename does to each are on [URLs and hostnames](/urls).
58
58
59
59
## Who owns a Space
60
60
61
-
Exactly one owner, one of two kinds:
61
+
The owner depends on how the Space was created:
62
62
63
63
-**A team.** The normal case. Team members reach the Space by their role. Slugs are unique per team rather than globally, so two teams can both own `docs`.
64
64
-**A space key.** A Space published without an account is owned by its `sfc_` key until someone claims it. See [Publish without an account](/anonymous-and-claim).
65
+
-**An external principal.** A customer in a [Partner API integration](/platforms/partner-api/customers) can own Spaces without a self-serve team.
65
66
66
67
To move a Space to another team, run `sf spaces transfer <team> --space docs`, or open **Space settings → General → Transfer this space → Transfer space…**. If you are an owner or admin of both teams, the move is instant. The Space keeps serving at its current address. Otherwise the target team has 7 days to accept, and nothing changes until they do. Roles and membership are on [Teams](/teams).
Copy file name to clipboardExpand all lines: content/(concepts)/teams.mdx
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@ sidebar:
5
5
order: 3
6
6
---
7
7
8
-
A team owns everything — Spaces, domains, API keys, billing, members — and the role you hold there caps what you can do with any of it.
8
+
A team owns its Spaces, domains, API keys, and billing. Your role in that team caps what you can do with them.
9
9
10
10
## Why work in a team
11
11
@@ -17,7 +17,7 @@ Free and Go allow only the owner. Adding another member needs [Plus](/billing#se
17
17
18
18
## What a team is
19
19
20
-
A team is the thing that owns work. Spaces, custom domains, API keys, billing, and members all hang off it. Every claimed Space belongs to exactly one team, even when you are its only member. There is no separate personal container to reason about.
20
+
A team is the thing that owns work in a self-serve account. Spaces, custom domains, API keys, billing, and members all hang off it. A Space you claim belongs to the team you select, even when you are its only member. [Partner API customers](/platforms/partner-api/customers) use external principals instead.
21
21
22
22
A team has a name and a slug. The slug is the first segment of its dashboard URLs. You can change it in **Team settings → General**, where a live check tells you whether the new one is free.
0 commit comments