v0.9.0-rc.31
·
36 commits
to main
since this release
Abstract hierarchy vocabulary (ADR-066 Phase 3) + Coalition tier — a wire-format-breaking rename release — plus collection-name alignment, a CRDT/transport dependency refresh, and persisted-sync-state hardening. Six landed PRs (#208, #209, #210, #211, #212, #213) advancing the workspace-wide peat#904 rename epic and refreshing the dependency floor.
Changed — BREAKING
- Hierarchy vocabulary renamed
Squad/Platoon/Company→Cell/Cohort/Federation, plus a new topCoalitiontier (ADR-066 Phase 3, #208). The model is now four fixed tiers above the platform:Platform → Cell → Cohort → Federation → Coalition.HierarchyLevelgainsCoalition(= 4); strategies, routing, partition, and QoS are extended for the new tier. Wire-format break onHierarchyLevelSerialize/Deserialize — peers must run matching major-rename builds. 22 files renamed across hierarchy/routing/topology/beacon/qos; an end-to-end Federation→Coalition glue test wiresPeerSelector → SelectedPeer → TopologyState → SelectiveRouterthrough the new tier. Tier 5+ is deferred to a future parametric N-tier ADR. - Collection names adopt the canonical hyphenated peat-schema convention (#209).
SyncMode,QoSClass,DeletionPolicy,PropagationDirection,ResurrectionPolicy,SyncDirection, andTtlConfigdispatch tables now usenode-states,cell-summaries,cohort-summaries,federation-summaries,coalition-summaries,contact-reports,audit-logs,track-history,capability-history,node-positions. The legacy underscored names (and the pre-ADR-066squad_summaries/platoon_summaries/company_summaries) are still accepted as transitional backward-compat shims —SyncMode::default_for_collectionemits a once-per-name deprecation warning naming the canonical replacement. These shims will be removed in a future release after operator migration.
Fixed
SyncStatePersistencetolerates undecodable persisted sync state instead of erroring (#211). A persistedautomerge::sync::Stateblob that no longer decodes (e.g. after an automerge version upgrade changed the encoding) previously failed the load — and inload_all(full recovery on restart), a single undecodable entry aborted recovery of every peer/doc sync state. Decode failures now degrade gracefully:load_sync_statereturnsOk(None)(the peer re-negotiates sync from scratch — no data loss), andload_all/load_all_for_peerskip the bad entry and keep the good ones. redb I/O errors remain fatal.
Dependencies
- automerge
0.7→0.9, iroh=1.0.0-rc.0→=1.0.0-rc.1(withiroh-blobs0.101→0.102andiroh-mdns-address-lookup0.2→0.3in lockstep), plusrustls/lrupatch bumps (#210). No on-disk Automerge document-format change across 0.8/0.9 (in-place store upgrade is safe). FIPS posture preserved:aws-lc-rsremains the runtime QUIC crypto provider;ringstays a compile-time transitive only. Mixed-version wire compat (rc.30 ↔ rc.31) verified via a local two-process harness — iroh QUIC handshake + automerge sync converge both directions.
Testing / CI
- mDNS rendezvous contract pinned for
iroh-mdns-address-lookup0.3 (#212). New#[ignore]-gated integration test dials a peer byEndpointIdonly, exercising the real_peat._udp.localadvertise/browse/resolve + QUIC handshake end-to-end. P2P Functional TestsCI job on the self-hosted multicast runner (#213). Runs the networking-dependent#[ignore]'d functional tests (cargo test --features automerge-backend --tests -- --ignored) that the GH-hosted job can't (no multicast). Auto-discovering and airgap-safe (external-infra tests stay feature-gated out). Gates releases via therelease.yml→ci.ymlworkflow_call.