Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions content/(reference)/limits.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,11 @@ A space that stops serving does not fall back to a blank 404. The status code an
| Account suspended | `402` | `This space is paused.` | `403` `tenant_suspended` |
| Space disabled, expired, or taken down | `404` | `This space is no longer available.` | `409` with the disable reason |
| Removed after a legal complaint | `451` | `This content is unavailable for legal reasons.` | `409` |
| Removed under the strictest safety category | `503` | `This space hasn't been published yet.` | `409` |
| Removed under the strictest safety category | `404` | `This space hasn't been published yet.` | `409` |

Reads are never blocked by account state. Only writes are. A past-due account keeps serving every site at full speed for the whole grace period, and only the dashboard, CLI, and API stop accepting changes.

The 451 and 404 pages are customizable like any other error page. The 503 case is byte-identical to a host that has never published anything.
The legal-removal and no-longer-available pages are customizable like any other error page. The strictest-safety response is byte-identical to a host that has never published anything. The strictest-safety response and a never-published host both return `404` with `X-Spacefast-Undeployed: 1` and the unpublished body, which distinguish them from a missing page on a published site.

## Rate limits

Expand Down
2 changes: 1 addition & 1 deletion content/(serve)/urls.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,4 @@ Any hostname ending in `.space.fast` or `.view.fast` is refused as a custom doma

## Hostnames that do not serve

A request to a hostname Spacefast does not route, or to a Space that has never published, answers `503` with `Cache-Control: no-store` and the body `This space hasn't been published yet.` It is deliberately not a 404, so a monitoring check can tell "nothing here yet" apart from "this page is missing".
A request to a hostname Spacefast does not route, or to a Space that has never published, answers `404` with `Cache-Control: no-store` and the body `This space hasn't been published yet.` The response includes `X-Spacefast-Undeployed: 1`. Use that header or the body to tell "nothing here yet" apart from a missing page on a published site.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Bug · Docs describe 404 behavior that production doesn't ship yet

Production runtime on monorepo main still returns 503 for unpublished hosts (_stattic_undeployed_action in runtime/engine/runtime/serve.php) and for the strictest-safety tombstone (runtime/engine/shared/artifacts.php), and nothing sets X-Spacefast-Undeployed. The change to 404 plus the header is spacefast/monorepo#4402, still open. If this merges first, monitors keyed on the header or a 404 will misread real 503 responses. Merge only after #4402 is deployed, or list it as a dependency in the description.

The same applies to the limits.mdx table row and paragraph.

Found by Indent Review Agent

Loading