Add step 1 covering Reticulum setup: LAN works automatically, for
other transports generate the example config with rnsd --exampleconfig
and configure the appropriate interface. Fixes missing instructions
that caused bridges not to discover each other on fresh installs.
Standardise on uv throughout.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Delete seed.py and cmd_seed — managing a separate radicle-node process
is radicle configuration, not this project's job. Simplify cmd_setup
to check only bridge prerequisites (rad, radicle-node, RNS, identity,
localhost listen). Update README prerequisites to cover all four user
types (from scratch, Radicle only, Reticulum only, both) with inline
install hints for each missing piece.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove the "two modes" framing and always-on seed quickstart; seed
setup is standard radicle-node configuration, not part of this
codebase. Remove --lora references and dead commands. Keep quickstart,
interface config, and architecture note.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Switch bridge TCP↔RNS tunnel from fire-and-forget RNS.Packet to
RNS.Buffer over RNS.Channel, which provides ordered reliable delivery
with automatic retransmission. A dropped packet no longer silently
corrupts Radicle's Noise session.
Delete adapter.py, link.py, messages.py (and their tests) — these
implemented a parallel peer-discovery and binary gossip layer that
duplicates what Radicle handles natively over the bridge session.
Remove the cmd_node, cmd_ping, cmd_peers CLI commands that used them.
Remove --lora flag: Reticulum caps announce bandwidth at 2% per
interface automatically, so application-level duty-cycle management
is unnecessary. --announce-retry-delays remains for tuning startup
timing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove "Why:" line and air-gapped/QR section (those modules were deleted)
- Remove stale commands: sync, bundle create/apply/info, qr-encode/decode
- Add seed mode quick-start and setup instructions
- Add gossip relay section with delta broadcast note
- Add --lora flag to all command flag tables
- Update architecture diagram: per-bridge port routing, gossip relay, 383 B MTU note
- Update module list: bridge/gossip/seed/adapter (remove sync/adaptive/git_bundle/qr)
- Update test count: 149
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
bridge.py:
- Fix _on_tunnel_opened/_on_tunnel_closed instance attrs shadowing methods
of the same name, causing NoneType-not-callable on every tunnel close
- Fix auto_seed not firing on --connect path: NID registration now triggers
whenever the NID is first learned from an announce, not only on is_new
- Move nid_is_new check inside _remote_bridges_lock to prevent double
rad-node-connect on concurrent announces
- Distinguish link CLOSED vs timeout in link establishment log message
- Add startup re-announce loop so peers that start slightly later are
discovered without manual --connect; delays are configurable
- Add announce_retry_delays parameter (default 5,15,30s; use 60,300,900s
on LoRa to respect duty cycle limits)
cli.py:
- Expose --announce-retry-delays flag with validation and helpful error
README.md:
- Rewrite setup section based on real end-to-end test (two machines,
radicle-node listen config, rad remote add workflow)
- Remove --connect and rad node connect from required steps; both are
now automatic via auto-discovery and auto-seed
- Add LoRa duty cycle note for announce delays
- Add full git workflow: init, push, clone, fetch across mesh