fix(site-publish): close split migration boundaries
Authored-By: OpenAI (GPT-5) <noreply@openai.com>
This commit is contained in:
@@ -133,10 +133,20 @@ any route's mutable objects change.
|
||||
Mutable default and override partitions receive their final cache policy before
|
||||
the matching prefix-scoped stale deletion, so publication never exposes a
|
||||
provisional cache policy or a pointer to a missing immutable target.
|
||||
Generated Ingress annotations and `site-publish-history.yaml` retain every
|
||||
seen bucket's access, prior route, and cumulative bucket-relative immutable
|
||||
paths, including while an artifact is absent. When a move
|
||||
places that retired prefix inside the new sync scope, only its declared
|
||||
immutable subtrees are excluded; a current-file collision fails publication.
|
||||
The bucket-keyed history rejects a protected-to-public transition even when the
|
||||
artifact is renamed; publishing that artifact publicly requires a new bucket.
|
||||
Legacy single-surface is public for this downgrade check. Removing or renaming
|
||||
an immutable rule preserves its prior URLs; current mutable content at one of
|
||||
those paths is rejected instead of replacing it.
|
||||
|
||||
Artifact input directories must be pairwise disjoint after filesystem
|
||||
resolution. Publication stops before build or upload if one contains another or
|
||||
escapes the repository. Descendant symlinks are also rejected, preventing
|
||||
escapes the repository. Symlinked roots, components, and descendants are also rejected, preventing
|
||||
protected input from entering a public artifact through dereference. Split
|
||||
storage endpoints are pinned to Garage, and each website
|
||||
authority is derived from its bucket; a site cannot expose an arbitrary backend.
|
||||
|
||||
Reference in New Issue
Block a user