Ivan FBandClaude Opus 4.8 e79f72f427 fix: keep SDS causalHistory wire-compatible with pre-hint nodes
v0.3.0 changed protobuf field 3 (causalHistory) from a repeated string of
message IDs to a repeated HistoryEntry submessage. Same field number and
wire type, so pre-hint nodes (v0.2.x) don't error — they silently read the
submessage bytes as a message-id string, corrupting dependency tracking so
SDS-wrapped messages are buffered as unmet deps and never delivered. This
broke message delivery between new and released (v10.34.1) nodes.

Make retrieval hints additive instead: field 3 stays a repeated string of
message IDs (unchanged on the wire), and hints move to a new field 7
(repeated HistoryEntry, keyed by message ID). Old nodes read field 3
correctly and skip the unknown field 7; new nodes join field 3 + field 7.
Compatible in every direction (old<->new, and legacy messages).

Add test_wire_compat.nim covering old-decode-of-new, new round-trip, and
new-decode-of-legacy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 16:20:24 +02:00
2025-12-22 18:10:45 +00:00

nim-e2e-reliability

Nim implementation of the e2e reliability protocol

Building

Nix

nix build --print-out-paths '.?submodules=1#libsds'
nix build --print-out-paths '.?submodules=1#libsds-android-arm64'

Windows, Linux or MacOS

make libsds

Android

Download the latest Android NDK. For example, on Ubuntu with Intel:

cd ~
wget https://dl.google.com/android/repository/android-ndk-r27c-linux.zip
unzip android-ndk-r27c-linux.zip

Then, add the following to your ~/.bashrc file:

export ANDROID_NDK_ROOT=$HOME/android-ndk-r27c
export PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH

Then, use one of the following commands, according to the current architecture:

Architecture command
arm64 make libsds-android ARCH=arm64
amd64 make libsds-android ARCH=amd64
x86 make libsds-android ARCH=x86

At the end of the process, the library will be created in build/libsds.so

S
Description
Nim implementation of the e2e reliability protocol
Readme
3.9 MiB
Languages
Nim 91.9%
Nix 5.9%
Shell 1.5%
C 0.7%