carlos / platform Public

docs: rule on the multi-box shared-bucket pin blind spot

§5's explicit rulings gain one more: box A's alsoProtected set is its
own registry only, so it cannot see box B's pins on a shared bucket.
Bounded today by local staging of running binaries, bucket-side
pointer protection, and one-box-per-bucket deployments; revisit before
a second box shares a bucket.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell f037146c449621547dc50e03ace59997f80120db parent 05823e3
1 file changed, +9 −0
  • docs/superpowers/specs/2026-08-10-releases-retention-design.md +9 −0
diff --git a/docs/superpowers/specs/2026-08-10-releases-retention-design.md b/docs/superpowers/specs/2026-08-10-releases-retention-design.md
index 3f13db1cb..b08b2168c 100644
--- a/docs/superpowers/specs/2026-08-10-releases-retention-design.md
+++ b/docs/superpowers/specs/2026-08-10-releases-retention-design.md
@@ -136,6 +136,15 @@ before it is ever turned into a delete key.
- **Enforcement scope is hosted-apps-only per box** (§6). An app with
routes on no box never prunes; nothing is at stake there and
trash→purge owns end of life.
+- **Multi-box shared-bucket deployments have a pin blind spot.** Box A's
+ `alsoProtected` set is its own registry only — it cannot see box B's
+ pins, so a version box B has adopted or is rolling back to could, in
+ principle, be pruned by box A. Bounded today because a running
+ process's binary is staged locally (a prune of the bucket object does
+ not touch what is already on disk) and because channel pointer
+ `Version` + `History` are protected bucket-side regardless of which box
+ reads them; also because today's deployments are one box per bucket.
+ Revisit before a second box shares a bucket.
## 6. Box enforcement leg