All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Per-collection, sync-mode-aware Automerge CRDT compaction to prevent
unbounded memory growth on long-running nodes and mobile devices (peat#760).
Compaction only runs on
LatestOnlysync-mode collections, preserving change history needed for delta sync onFullHistorycollections. Disabled by default; enable withPEAT_COMPACTION_ENABLED=true.
- Formation auth handshake deadlock over iroh 0.97 connections (#759).
accept_bi()requires the opener to write before the peer can accept the stream — the initiator now sends aFORMATION_AUTH_VERSIONpreamble byte immediately afteropen_bi(), unblocking the acceptor.
- Integration tests for formation auth handshake over live iroh connections (successful auth and wrong-key rejection).
- BREAKING: Enforce mandatory formation credentials on all Iroh QUIC connections
FormationKeyis now required (not optional) forSyncProtocolHandlerandMeshSyncTransport- New
FormationEndpointHooksgates ALL QUIC connections (sync, blobs) at transport level — only formation members accepted - New
FormationPeerSettracks known formation member EndpointIds, populated by discovery - Outgoing sync connections now run
respond_to_formation_auth()HMAC challenge-response - Removed "warn-and-allow" certificate mode — certificates are always hard-enforced when configured
- Removed
PEAT_REQUIRE_CERTIFICATESenv var — certificates always required when bundle is present
FormationPeerSettype insecurity::formation_peersfor thread-safe peer trackingFormationEndpointHooksinstorage::iroh_blob_storefor QUIC-level connection gatingMeshSyncTransport::connect_and_authenticate()for authenticated outbound connectionsSyncTransport::get_or_connect()trait method with default fallback implementationNetworkedIrohBlobStore::build_endpoint_with_formation_peers()for production endpoint construction
SyncProtocolHandler::new()now requiresFormationKeyparameter (breaking)SyncProtocolHandler::with_certificate_bundle()no longer takesrequireparameter (breaking)MeshSyncTransport::new()now requiresFormationKeyparameter (breaking)PeerConnector::new()now requiresFormationPeerSetparameter (breaking)PeerConnector::with_certificate_bundle()no longer takesrequireparameter (breaking)- All sync connection sites use
get_or_connect()instead ofget_connection()for authenticated fallback
- Extract sync modules from peat-protocol into peat-mesh (automerge_sync, sync_channel, sync_forwarding)
- Wire AutomergeSyncCoordinator into peat-mesh-node binary with 5s polling task
- Update deployment guide for Automerge sync stack
- Apply cargo fmt and clippy fixes for CI compliance
- Initial extraction as standalone crate from peat-protocol
- Complete Peat-Lite CRDT encodings, query handler, and InMemoryBackend
- Kubernetes support: discovery, headless service, StatefulSet (ADR-0001)
- Kubernetes deployment infrastructure: Dockerfile, Helm chart, health probes (ADR-0001 Phase 2)
- HTTP/WS service broker with REST API and WebSocket event streaming
- Device keypair (Ed25519) and formation key security primitives
- mDNS, static, and Kubernetes peer discovery strategies
- Topology management with partition detection and autonomous operation
- Beacon broadcasting and observation for geographic mesh awareness
- GOA CI script for Radicle patches
- ADR-0001 through ADR-0009 transferred from peat repo
- README with CI and usage details
- CI pipe buffer deadlock (redirect verbose output to log file)
- Add crates.io metadata for discoverability