Skip to content

Commit 1ca57ae

Browse files
zeligclaude
andcommitted
swip-61: dual parenting not required on self-indexed cohorts
Per SWIP-65 (PR #106): a delivery gap on a self-indexed cohort is detectable and recoverable from storage, so the contract is satisfied by deliver-or-recover. The second parent becomes a per-subscriber latency/cost choice - single-parented nodes were already well-formed, and a single-parented relay endangers only itself. Conformance items 5-6 bind only nodes that maintain a second parent. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 91e7506 commit 1ca57ae

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

SWIPs/swip-61.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,16 @@ and per-hop pricing (bps-bw-incentives) is what will price it; an active/standby
154154
variant (second parent connected but mute until asked) trades the gap-free guarantee
155155
for half the traffic and is deliberately **not** specified here.
156156

157+
On cohorts running **self-indexed feeds
158+
([SWIP-65](https://github.com/ethersphere/SWIPs/pull/106))** a delivery gap is
159+
detectable at the next frame and recoverable from storage, so a second parent is **not
160+
required** — for a subscriber content with recovery latency it is pure extra cost, and
161+
forgoing it is a per-subscriber choice: single-parented nodes are already well-formed
162+
(SWIP-60 leaves), and a single-parented relay endangers only itself — its children
163+
hold their own second parents. Dual parenting remains the costlier-but-faster product
164+
for gap-intolerant subscribers (the live edge). Conformance items 5–6 read
165+
accordingly.
166+
157167
### Reparenting (`Reparent`) — make-before-break
158168

159169
`Reparent{to}` is the parent→child instruction to move: the child `Subscribe`s to the
@@ -339,8 +349,10 @@ An implementation is conformant when:
339349
arrived;
340350
3. an accept carries the echoed `CohortSpec`;
341351
4. absent races, a join completes in two steps: one probe round, one (dual) attach;
342-
5. a node offered two distinct parents maintains both; duplicate deliveries never
343-
surface past the binding's dedup rule;
352+
5. a node offered two distinct parents maintains both — except on self-indexed cohorts
353+
([SWIP-65](https://github.com/ethersphere/SWIPs/pull/106)), where the second parent
354+
is optional per subscriber and items 5–6 bind only nodes that maintain one;
355+
duplicate deliveries never surface past the binding's dedup rule;
344356
6. the failure of any single relay or link causes no delivery gap anywhere below it;
345357
the half-orphaned children re-acquire a second parent via the ordinary join;
346358
7. every reparent is make-before-break;

0 commit comments

Comments
 (0)