carlos / platform Public

spec: host lifecycle claim rev 6.24, joint round 16 (R16-1, R16-3)

A scope covers only its own namespace (instance scopes never touch
moves/; the legacy scope excludes child incarnations); the legacy loss
identity is session 0 with generation "" and is valid in both loss
fields; born-covered counts only an unscoped park or one of exactly
holder.location.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 0b8218969ae7a59328474eed13256df8a3b892c3 parent 876d690
1 file changed, +20 −5
  • docs/superpowers/specs/2026-10-02-host-lifecycle-claim-design.md +20 −5

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 ff9fa477a..f0d9c6a90 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
@@ -1,6 +1,6 @@
# The host lifecycle claim
-Design, 2026-10-06, **rev 6.23**. Joint rounds 6 and 7 judged the claim ready for primitive planning. Rev
+Design, 2026-10-06, **rev 6.24**. Joint rounds 6 and 7 judged the claim ready for primitive planning. Rev
6.5 added the R6-4 rule. Rev 6.6 added writer epochs (R7-1, amadan #225).
Rev 6.7 answered the moves session's notes on §6.4a. Rev 6.8 rewrote §6.4a
around writer sessions, for joint round 8. Rev 6.10 answers joint round 10
@@ -21,7 +21,9 @@ R13-3): the run walk across regions, coverage stated completely, the
publication walk over every entry, and the declaration representation.
Rev 6.23 answers joint round 15 (R15-1): the park scope's staging
paths, and evidence_at as the original bound for every scope; it also
-states the rev 7.14 sweep notes (joining, the horizon). Rev 6.9 answered
+states the rev 7.14 sweep notes (joining, the horizon). Rev 6.24 answers
+joint round 16 (R16-1 scope namespaces, R16-3 the legacy loss identity)
+and states the narrowed born-covered rule. Rev 6.9 answered
joint round 9
(R9-1 to R9-4) and takes **Paul's ruling R6 (2026-10-04): a box never
reuses its local database. Every writer start restores from the
@@ -248,7 +250,12 @@ Field rules:
- `moves/<host>`: the whole staging prefix, only for an at-rest sweep
while no operation stages there.
- Nothing else, and no trailing `/`. `incarnation` names the archive the
+ Nothing else, and no trailing `/`. **A scope covers only its own
+ namespace (R16-1):** an `instances/...` scope never lists or parks
+ anything under `moves/`, and the legacy `instances/<host>` scope
+ excludes every child incarnation location under it; staging is parked
+ only under an explicit `moves/...` scope with its own evidence bound.
+ `incarnation` names the archive the
parked objects go to (`parked/<incarnation>/<host>/...`): the location's
own incarnation, the staging operation's holder incarnation for a
`moves/<host>/<op id>` scope, and for a `moves/<host>` sweep of a free
@@ -1591,7 +1598,12 @@ reached, and where their wording differs, this text wins.
is declared there too (moves 7.13 note 7, R13-3). **Representation:**
the same admission entry carries `writes_lost` (one) and
`additional_writes_lost` (a list), each `{box, generation, session,
- remote_max_txid}`, unique by `(box, session)`; the caller supplies
+ remote_max_txid}`, unique by `(box, session)`. **The legacy
+ identity** (R16-3) is session `0` with generation `""` (read as
+ `@root`): an adopted host's pre-claim writer, whose box `Adopt`
+ records as `holder.writer_box`. It is valid in both fields, exactly
+ like any other declaration; every other declaration has session `> 0`
+ and a non-empty generation. Box is always non-empty; the caller supplies
the list, the library records it in the admitting CAS. **Alerts:**
the admitting box raises one alert per declaration after the CAS
succeeds, and retries until delivered; the console's durable loss
@@ -1623,7 +1635,10 @@ reached, and where their wording differs, this text wins.
which nothing retires); or an entry admitted while the claim holds
a `park-replica` of the whole location in its `predecessor_region`
(that park retires the predecessor; a rollback's return admitted
- after the release queued the target region's park, moves 7.13 note 2);
+ after the release queued the target region's park, moves 7.13 note 2).
+ Only an unscoped `park-replica` or one whose scope is exactly
+ `holder.location` counts; a scoped park of an old incarnation's
+ location or of a staging prefix does not;
- **by publication** (below);
- **by `CoverRegionPredecessors(op, phase, region)`** in one of the
three CASes that queue a whole-location park of `region` (item 6):