DeltaStore.frontier returned the live internal set. A delta built with
parents=store.frontier aliased it, so insert's frontier maintenance
(add + difference_update) emptied the frontier on every insert and
rewrote every stored delta's parents to {} — the CRDT causal chain
degenerated into all-roots. Sopher's bridge now copies on its side
(sopher ADR-0026.1 §2.1); this is the recommended CORE-side defense in
depth: frontier hands out snapshots, and insert copies delta.parents
into the event envelope.
Regression-tested with the exact aliasing pattern (3-delta chain keeps
one head and stable per-delta parents).
|
||
|---|---|---|
| .. | ||
| __init__.py | ||
| crdt.py | ||
| decompose.py | ||
| delta_store.py | ||
| store.py | ||