summaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/indexer/group_index.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/indexer/group_index.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/indexer/group_index.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/indexer/group_index.py b/packages/meshbay-node/src/meshbay_node/indexer/group_index.py
index a69429c..5dbdc5d 100644
--- a/packages/meshbay-node/src/meshbay_node/indexer/group_index.py
+++ b/packages/meshbay-node/src/meshbay_node/indexer/group_index.py
@@ -59,6 +59,12 @@ class GroupIndex:
sk_node: Ed25519PrivateKey
gek: bytes | None = None # None → public group (no encryption)
version: int = 1
+ # The group's roots and whether each is readable right now. Travels inside
+ # the encrypted payload because it names the operator's directories, and a
+ # member needs it to tell "temporarily unavailable" from "deleted" — a
+ # distinction the entries alone cannot carry, since an unavailable root's
+ # files are still listed. Absent in an index written before roots existed.
+ roots: list = field(default_factory=list)
_entries: dict = field(default_factory=dict, repr=False) # id → IndexEntry
# ── Entry management ──────────────────────────────────────────────────────
@@ -90,6 +96,7 @@ class GroupIndex:
payload = msgpack.packb({
"group_id": self.group_id,
"version": self.version,
+ "roots": list(self.roots),
"entries": [asdict(e) for e in self.entries],
}, use_bin_type=True)
@@ -170,6 +177,9 @@ class GroupIndex:
sk_node=sk_node,
gek=gek,
version=payload["version"],
+ # Absent from an index written before roots existed; an empty list
+ # reads as "nothing known about availability", not "no roots".
+ roots=payload.get("roots") or [],
)
for e in payload["entries"]:
idx.add_entry(IndexEntry(**e))