spec: host lifecycle claim, record the S3 behaviour verified on real AWS
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 file changed,
+19
−0
docs/superpowers/specs/2026-10-02-host-lifecycle-claim-design.md+19 −0
CI passed — run details
diff --git a/docs/superpowers/specs/2026-10-02-host-lifecycle-claim-design.md b/docs/superpowers/specs/2026-10-02-host-lifecycle-claim-design.md| index 3e6fb5948..492396baf 100644 |
| --- a/docs/superpowers/specs/2026-10-02-host-lifecycle-claim-design.md |
| +++ b/docs/superpowers/specs/2026-10-02-host-lifecycle-claim-design.md |
| @@ -650,3 +650,22 @@ the model catches it. |
| | CC10 | §8 | |
| | CC11 | §4 | |
| | CC13 | §6.1 | |
| + |
| +## 13. S3 behaviour this relies on, verified |
| + |
| +Checked on 2026-10-02 against real AWS by the moves session, on a |
| +versioned dev bucket (`carlos-dev-ie-640012953448`, eu-west-1). The |
| +scratch prefix was deleted afterwards, every version and delete marker |
| +included. |
| + |
| +| # | Behaviour | Used by | |
| +|---|---|---| |
| +| 1 | Two PUTs to one key give two distinct version ids | C3, §6.2 | |
| +| 2 | `CopyObject` from `key?versionId=V1` returns V1's body after V2 is written | §6.2 step 3 | |
| +| 3 | `DeleteObject` with `VersionId=V1` removes only V1; V2 stays current | C3, §6.2 step 5 | |
| +| 4 | A bare delete creates a delete marker; V2 is still copyable by id behind it | why C3 forbids bare deletes | |
| +| 5 | `PutObject If-None-Match: *` gets 412 on an existing key | create-only claims and manifests | |
| +| 6 | `PutObject If-Match` with a wrong ETag gets 412 | every claim CAS | |
| +| 7 | `DeleteObject If-Match` with a wrong ETag gets 412 (general-purpose versioned bucket) | available as a second guard on §6.2 deletes | |
| +| 8 | A SigV4 PUT signed 14 min earlier succeeds; 16 min earlier gets 403 RequestTimeTooSkewed | §6.2a's `H` | |
| +| 9 | CopyObject turns a multipart source ETag into a single-part one; `CopySourceIfMatch` with a wrong ETag gets 412 | §6.2 records sizes and version ids, not ETags | |