Skip to content

Releases: defenseunicorns/peat

v0.9.0-rc.29

v0.9.0-rc.29 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Jul 21:36
cc93e5e

Added

  • mDNS-discovered peer dialing (Android) (#1007) —
    the Automerge connection manager
    now consumes the peat-controlled _peat._udp browse
    (transport.peat_mdns_events()) alongside iroh's MdnsAddressLookup,
    converts each discovered peer to a dialable PeerInfo (via peat-mesh's new
    From<discovery::PeerInfo> bridge, peat-mesh#268) and dials its advertised
    concrete addresses with connect_peer. Fixes the Android
    "discovered-but-no-dial" gap: iroh swarm-discovery emits nothing on the
    wildcard-bound interface there, so nodes advertised but never connected and
    the peer count stayed at 0. Runs alongside the iroh path on desktop
    (get_connection dedup prevents a double-dial); a non-hex node_id is skipped.
    (peat-protocol)

Added — peat-ffi

  • Deterministic formation iroh identity for createNode (#1006) —
    a canonical
    formation iroh identity is derived for createNode, with an explicit
    node_id for a stable endpoint identity across restarts. Emits an identity
    base64 fallback log on non-Android too.
  • bindAddress threaded through createNode (#1006) —
    the createNode JNI
    entrypoints accept a bindAddress so the iroh endpoint binds to the detected
    LAN IP on Android instead of the wildcard interface.
  • mDNS reconnect watchdog (#1007) —
    dial-side formation auth now routes through
    peat-mesh's respond_to_formation_auth, with a watchdog that re-dials peers
    on mDNS reconnect.
  • UniFFI-exported blob-transfer surface + blob_fetch_start (#1017, peat#1013) —
    enable_blob_transfer, blob_add_peer, blob_put, blob_exists_locally,
    blob_endpoint_id, blob_bound_addr (previously JNI-only) now carry
    #[uniffi::export], plus new blob_add_peer_id (wraps peat-mesh's
    add_peer_from_hex_id) and the async, poll-based
    blob_fetch_start(hash, size, peer_id: Option<String>) ->
    Arc<BlobFetchHandle>. peer_id = None runs the mesh-sync fetch_blob
    path; Some(id) runs peat-mesh's new direct-peer fetch_blob_from_peer
    path — one entrypoint, both delivery modes. BlobFetchHandle::dispose()
    aborts the underlying task for real mid-transfer cancellation.
    enable_blob_transfer's bind_addr param changes from
    Option<SocketAddr> to Option<String> (SocketAddr isn't
    UniFFI-liftable); the JNI wrapper now passes the raw string through
    instead of pre-parsing, so a malformed non-empty bind address surfaces as
    an error instead of silently falling back to an ephemeral bind.

Pinned

  • peat-mesh floor raised to 0.9.0-rc.45 (peat-mesh#274 —
    NetworkedIrohBlobStore::fetch_blob_from_peer, the direct-peer blob-fetch
    path blob_fetch_start consumes). Default features unchanged
    (peat-mesh continues to build with default-features = false, per-crate
    opt-in).

v0.9.0-rc.28

v0.9.0-rc.28 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 Jun 13:54
v0.9.0-rc.28
871776d

Added — peat-ffi

  • Persistent peer roster (#1000) — RosterStore (JSON on disk) tracks known
    group members across restarts. Exposed via six new UniFFI surface methods:
    roster_remember, roster_upsert, roster_remove, roster_get,
    roster_list, roster_list_by_group. Also adds the RosterEntry UniFFI
    Record. Stored as plain JSON (non-secret reachability hints only; no FIPS
    concern).
  • Per-peer reconnect supervisor (#1000) — dial state machine
    (Idle → Connecting → Connected → Backoff) with exponential backoff (2 s
    base, 5 min cap) plus deterministic per-peer jitter to de-correlate
    thundering-herd re-dials. Three new UniFFI surface methods:
    reconnect_known_peers (gentle, honours backoff), wake_reconnect (clears
    backoffs — call on foreground / network-up events), on_peer_observed (hint
    that a specific roster member is reachable now). Concurrent in-flight dials
    are bounded at MAX_CONCURRENT_RECONNECT_DIALS = 8.
  • Cross-transport reconnect dedup (#1000) — the supervisor's connected set
    is the union of iroh peers and any roster member with a live link on any
    transport (BLE, etc.), so a peer already reachable over BLE is not also dialed
    over iroh/relay.
  • Origin-tagged DocumentChange (#1000) — new required field
    origin: ChangeOrigin on the UniFFI DocumentChange Record. ChangeOrigin
    is a new UniFFI enum with variants Local (own publish) and
    Remote { peer_id } (sync from a peer). Enables consumers to notify only on
    remote changes. Coordinated binding regen required — paired with
    peat-flutter#13.
  • Four Dart C-ABI shims (#1000) — hand-rolled #[no_mangle] extern "C"
    functions reformatting flat FFIBuffer arrays for roster_remember,
    reconnect_known_peers, wake_reconnect, and on_peer_observed. Sit
    alongside the existing shims in dart_ffi.rs.
  • Contributor workflow guardrails (#1000) — CLAUDE.md and SKILL.md now
    require fork contributors to sync to upstream main before opening a PR, run
    the verification checklist, and pass the consumer-reference grep gate.

Pinned

  • peat-mesh >=0.9.0-rc.43, <0.9.1 (unchanged from rc.27).

peat-ffi 0.1.4 (Maven AAR)

Choose a tag to compare

@github-actions github-actions released this 24 Jun 14:27
871776d

Published com.defenseunicorns:peat-ffi:0.1.4 to Maven Central.

Maintainer: edit this release to add changelog entries, breaking-change notes, and consumer migration guidance.

v0.9.0-rc.27

v0.9.0-rc.27 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Jun 23:59
8a94796

Fixed — peat-protocol

  • relay-n0-hosted feature now forwards to peat-mesh (#995). After the
    ADR-062 relocation moved IrohTransport endpoint construction (presets::Empty
    vs presets::N0) into peat-mesh, peat-protocol's relay-n0-hosted feature
    was left an orphaned no-op (= []) — enabling it had no effect on the relay
    posture. It now forwards to peat-mesh/relay-n0-hosted, so the documented
    "flips every IrohTransport constructor to the n0-hosted preset" behavior
    takes effect again. Still OFF by default (tactical/edge builds must not phone
    home through n0 infrastructure).

Added — peat-ffi

  • Non-blocking PeatNode::connect_peer_nowait (#995) — a fire-and-forget
    variant of connect_peer that spawns the dial + formation handshake + sync
    trigger on the runtime and returns immediately, so UI consumers don't freeze
    on the synchronous FFI call for the full dial duration. Background failures
    are surfaced via tracing on every platform. Ships in the Maven AAR 0.1.3 cut.
  • relay-n0-hosted feature passthrough (#995) — forwards to the
    peat-mesh/peat-protocol feature of the same name. OFF by default.

Pinned

  • peat-mesh >=0.9.0-rc.43, <0.9.1 (unchanged from rc.26).

peat-ffi 0.1.3 (Maven AAR)

Choose a tag to compare

@github-actions github-actions released this 21 Jun 00:19
8a94796

Published com.defenseunicorns:peat-ffi:0.1.3 to Maven Central.

Added

  • PeatNode.connectPeerNowait(...) — a non-blocking, fire-and-forget variant of connectPeer. It spawns the connect + formation handshake + sync trigger on the runtime and returns immediately, so UI callers don't freeze on the synchronous FFI call for the full dial duration (~seconds for an unreachable peer). On success the peer appears in connectedPeers / a Connected event fires; background failures are surfaced via tracing on every platform and otherwise dropped (there's no synchronous caller to return them to). (peat#995)
  • relay-n0-hosted feature passthrough — opt-in build feature forwarding to the peat-mesh/peat-protocol feature of the same name (n0-hosted relay pool + pkarr DNS discovery). OFF by default; enabling it routes peer traffic through n0's public CDN. (peat#995)

Compatibility

Additive only — no JNI ABI break. Existing consumers link against the 0.1.2 surface unchanged. Pairs with workspace crates.io release 0.9.0-rc.27 (peat-protocol/peat-schema), which carries the matching peat-protocol relay-n0-hosted forwarding fix.

Consumer migration

No migration required. To adopt the non-blocking connect, switch UI-thread connectPeer calls to connectPeerNowait and observe results via connectedPeers / the Connected event rather than the (now-immediate) return value.

v0.9.0-rc.26

v0.9.0-rc.26 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Jun 17:47
v0.9.0-rc.26
68e9c3c

Changed — peat-protocol

  • Distribution / file-transfer implementation relocated to peat-mesh
    (#993, peat#992). peat-protocol::storage::{file_distribution, model_distribution} now re-export from peat_mesh::storage::… — peat-mesh is
    the canonical iroh consumer (ADR-060 §5), so the transport-specific impl no
    longer lives in the protocol layer. Public surface unchanged. Requires
    peat-mesh rc.43. (peat-protocol's direct iroh dep is not yet dropped —
    network/transport/mesh_sync_transport still use it.)

Added — peat-protocol

  • ADR-071: subscription-based convergence seam (#991). Receiver-evaluated,
    sender-ignorant "need" (the NeedEvaluator abstraction, collection on the
    distribution document, the should_deliver/can_skip_permanently gate),
    opt-in via IrohFileDistribution::with_need_evaluator (default preserves
    directed target_nodes delivery).

Added — peat-ffi

  • BLE-relay sync surface: CRDT-KV + Automerge counter + node-layer publish
    (#983), runtime n0-relay toggle on TransportConfigFFI (#989), and
    build/packaging fixes (#985, #987, #988). Workspace peat-mesh floor raised
    to rc.42 (#990).

v0.9.0-rc.25

v0.9.0-rc.25 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Jun 22:36
v0.9.0-rc.25
605384b

What's Changed

  • chore: remove LightFish and DiSCO consumer references by @kitplummer in #976
  • chore: replace sapient plan with redirect stub by @kitplummer in #977
  • fix(sync): converge BLE-bridged docs + carry app collections over lite-bridge by @kitplummer in #978
  • docs(adr-070): correct coordinate system handling; remove MGRS anticipation by @kitplummer in #979
  • perf(protocol): skip Automerge decode for already-handled inbox distributions (peat#980) by @kitplummer in #981
  • chore: bump workspace version to 0.9.0-rc.25 by @kitplummer in #982

Full Changelog: v0.9.0-rc.24...v0.9.0-rc.25

v0.9.0-rc.24

v0.9.0-rc.24 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Jun 16:50
v0.9.0-rc.24
6c0edec

Proto package namespace cap.*peat.* (ADR-069, peat#972). All 20 schema protos move from package cap.<domain>.v1; (a fossil of the project's original academic name, Capability Aggregation Protocol) to package peat.<domain>.v1;, matching the project name and the existing peat.sidecar.v1 service namespace. The peat-schema Rust module tree is flattened, so the canonical path is peat_schema::<domain>::v1::<Type> (the pre-existing flat re-export means consumer imports are unchanged). Breaking only at the descriptor / reflection / fully-qualified-name layer (cap.node.v1.Nodepeat.node.v1.Node) — affects buf, grpcurl reflection, and any FQN-keyed registry. Not breaking: proto3 binary wire, persisted Automerge/postcard documents (the package is not encoded in messages), gRPC method paths (these protos define messages only), or proto3 JSON keys. Pre-1.0 clean break, consistent with the ADR-066/068 precedent. The spec/proto/ reference tree + draft-peat-protocol-*.md update is a deferred spec-doc follow-up.

v0.9.0-rc.23

v0.9.0-rc.23 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Jun 21:45
v0.9.0-rc.23
447c877

ADR-068 Node base-unit vocabulary, Phase 1 (peat#969, epic peat#968). The schema and protocol converge on Node as the single name for the base mesh participant, eliminating the overloaded "Platform" (ADR-068, which amends ADR-066's Platform row). Renames across the wire surface: platform_id(s)node_id(s), platform_typenode_type, target_platform(s)target_node(s), source_platform(s)source_node(s), DEVICE_TYPE_SENSOR_PLATFORMDEVICE_TYPE_SENSOR_NODE, and the FFI/storage surface (PlatformInfo/PlatformStatusNodeInfo/NodeStatus, collection "platforms""nodes"). Wire-breaking (proto field numbers are preserved, so the binary format stays tag-compatible; field names, JSON keys, and the collection name break) — a pre-1.0 clean break consistent with the ADR-066 precedent in rc.22. The role-label prose "Strike/Support platform" and OS/hardware "platform" contexts are intentionally preserved as a class-of-vehicle / computing-platform carve-out. peat-mesh adopted the matching internal HierarchyLevel::PlatformNode rename in 0.9.0-rc.35 (Phase 3). Downstream lockstep: peat-node Phase 4 renames its sidecar Platform/PutPlatform/GetPlatforms surface and the "platforms" collection to match; peat-atak-plugin (Phase 5) must regenerate its FFI bindings.

v0.9.0-rc.22

v0.9.0-rc.22 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 03 Jun 01:33
v0.9.0-rc.22
672d75a

ADR-066 hierarchy vocabulary rename (peat#957, peat#904 Phases 1+2). The schema and protocol adopt the abstract, non-military hierarchy vocabulary defined in ADR-066: the four aggregation tiers are now Cell → Cohort → Federation → Coalition (replacing Squad/Platoon/Company and adding a fourth top tier). This is a wire-breaking change to the renamed proto fields, messages, and enum values — peers and persisted documents produced before rc.22 are not compatible across the rename. peat-mesh adopted the matching internal HierarchyLevel rename + Coalition tier in 0.9.0-rc.31 (Phase 3).

Changed — peat-schema (wire format)

  • cell.proto: Cell.platoon_id (field 5) renamed to Cell.cohort_id. Same field number, same optional string type and LWW-Register semantics — only the name changed.
  • Hierarchy summary messages renamed: SquadSummaryCellSummary, PlatoonSummaryCohortSummary, CompanySummaryFederationSummary, plus a new CoalitionSummary for the fourth tier. Their leaf identifier fields rename accordingly (squad_idcell_id, platoon_idcohort_id).
  • command.proto CommandScope enum: SQUAD = 2CELL = 2, PLATOON = 3COHORT = 3, added FEDERATION = 5 and COALITION = 6. target_ids now carries node/cell/cohort/federation/coalition ids.
  • Type registry / ontology: TypeDescriptor field metadata and the ontology concepts updated (platoon/companycohort/federation/coalition); type IDs (peat.cell.v1.*, peat.node.v1.*) and hyphenated collection names are unchanged.

Changed — peat-protocol

  • Internal coordinator, leader-election, routing, discovery, hierarchy-aggregation, and command types renamed squad_idcell_id and the analogous tier fields throughout, tracking the schema rename. No new public capability beyond the rename.
  • automerge dependency bumped 0.7.10.9.0 to stay ABI-compatible with peat-mesh 0.9.0-rc.31 (which moved to automerge 0.9). Required because peat-protocol's automerge-backend feature shares the Automerge type with peat-mesh's storage layer across the re-export boundary; a version split produces mismatched types against every Automerge-typed call site. No peat-protocol source changes were needed beyond the bump — the 0.9 read/write API surface peat-protocol uses (ReadDoc/Transactable get/put/put_object) is source-compatible.

Migration

Consumers that round-trip the renamed fields must update to the new names (e.g. platoon_idcohort_id on CellState). Because field numbers are preserved, Protobuf binary payloads decode unchanged; JSON/named-field access and any hardcoded CommandScope enum names must be updated.