Feature stability and coverage

View Source

Barrel P2P follows semantic versioning for 0.x: minor bumps (0.x → 0.y) may change documented public APIs; patch bumps (0.x.y → 0.x.y+1) are non-breaking. See README.md for the full policy. 1.0 is not yet on the roadmap.

Stability tiers used below:

TierPromise
supportedThe team avoids silently breaking it. Intentional breaks land with a CHANGELOG entry and deprecation.
betaWorks as documented but the shape may change across a 0.x minor bump.
experimentalAnything may change. Use at your own risk; the next minor may rename, redesign, or remove it.

Membership and overlay

FeatureTierCoverage notes
barrel_p2p:join/1, leave/0supportedCT: barrel_p2p_hyparview_SUITE, barrel_p2p_proto_dist_SUITE
barrel_p2p:active_view/0, passive_view/0supportedCT: barrel_p2p_hyparview_SUITE
HyParView shuffle and promote-from-passivesupportedCT: barrel_p2p_churn_SUITE, soak broadcast_burst
barrel_p2p:subscribe/0,1, unsubscribe/1supportedCT: barrel_p2p_hyparview_SUITE
Plumtree gossip (barrel_p2p_plumtree)supportedCT: barrel_p2p_plumtree_SUITE; soak broadcast_burst

Distribution

FeatureTierCoverage notes
-proto_dist barrel_p2p boot pathsupportedCT: barrel_p2p_proto_dist_SUITE
barrel_p2p_dist carrier defaultssupportedCT: barrel_p2p_dist_basic_SUITE
Ed25519 auth + TLS channel binding (v2)supportedCT: barrel_p2p_dist_auth_SUITE, barrel_p2p_proto_dist_SUITE
TOFU vs strict trust modessupportedCT: barrel_p2p_dist_auth_basic_SUITE
Idle dist-channel GC (barrel_p2p_dist_gc)supportedCT case gc_skips_live_streams; EUnit barrel_p2p_dist_gc_tests
barrel_p2p:migrate_peer/1,2betaEUnit: barrel_p2p_migrate_peer_tests

Service registry

FeatureTierCoverage notes
register_service/1,2,3, unregister_service/1supportedCT: barrel_p2p_registry_SUITE
lookup/1, lookup_local/1, list_services/0supportedCT: barrel_p2p_registry_SUITE
whereis_service/1,2 with overlay fallbacksupportedCT: barrel_p2p_registry_SUITE, barrel_p2p_router_SUITE
Via callbacks ({via, barrel_p2p, _})supportedCT: barrel_p2p_registry_SUITE
global_register/1 proxy bridgebetaCT: barrel_p2p_registry_SUITE
get_proxy/1betaCT: barrel_p2p_registry_SUITE
Service events API (subscribe_services/0,1)betaCT: barrel_p2p_service_events_SUITE

Singletons and leader election

FeatureTierCoverage notes
lead/1,2, resign/1, leader/1, is_leader/1betaCT: barrel_p2p_leader_SUITE, barrel_p2p_leader_e2e_SUITE
{barrel_p2p_leader, _, {elected, Fence} | revoked} msgsbetaCT: barrel_p2p_leader_SUITE
HLC fencing token (fence/1)betaCT: barrel_p2p_leader_e2e_SUITE (F2 > F1 across leader failover)
peer_up/peer_down re-electionbetaCT: barrel_p2p_leader_e2e_SUITE

Sharded placement

FeatureTierCoverage notes
place/1, owners/2, is_owner/1, partition/1betaCT: barrel_p2p_shard_SUITE, barrel_p2p_shard_e2e_SUITE
members/0 (lease-based live-node set)betaCT: barrel_p2p_shard_SUITE, barrel_p2p_shard_e2e_SUITE
{barrel_p2p_shard, {acquired | released, P}} eventsbetaCT: barrel_p2p_shard_SUITE, barrel_p2p_shard_e2e_SUITE

Durable reminders

FeatureTierCoverage notes
remind/3, remind_after/3, cancel_reminder/1betaCT: barrel_p2p_reminder_SUITE, barrel_p2p_reminder_e2e_SUITE
subscribe_reminders/0,1, unsubscribe_reminders/1betaCT: barrel_p2p_reminder_SUITE
{barrel_p2p_reminder, Key, Payload, Fence} deliverybetaCT: barrel_p2p_reminder_SUITE (stable fence, no double-fire)
Survivor fires after owner deathbetaCT: barrel_p2p_reminder_e2e_SUITE (kill owner before fire)
Disk persistence (survives full-cluster restart)betaCT: barrel_p2p_reminder_e2e_SUITE (reminder_survives_full_cluster_restart)

Replicated maps

FeatureTierCoverage notes
new_map/1,2, delete_map/1betaCT: barrel_p2p_map_SUITE, barrel_p2p_map_e2e_SUITE
map_put/3, map_remove/2, map_get/2, map_keys/1, map_to_list/1betaCT: barrel_p2p_map_SUITE; convergence in barrel_p2p_map_e2e_SUITE
subscribe_map/1,2, unsubscribe_map/1,2betaCT: barrel_p2p_map_SUITE (events, DOWN cleanup)
{barrel_p2p_map, Name, {put | remove, ...}} eventsbetaCT: barrel_p2p_map_SUITE
Late-join full-sync from peersbetaCT: barrel_p2p_map_e2e_SUITE (map created after cluster formation)
Optional disk persistence (persist => true)betaCT: barrel_p2p_map_SUITE (persist_recovers_after_restart), barrel_p2p_map_e2e_SUITE (persist_map_survives_full_cluster_restart)

Streams

FeatureTierCoverage notes
barrel_p2p_streams tagged multiplexsupportedEUnit: barrel_p2p_streams_tests, prop suite
Reserved <<"barrel_p2p:", _>> tag namespacesupported(documented; future-proofs internal protocols)

CRDT and time

FeatureTierCoverage notes
barrel_p2p_ormap (OR-Map CRDT)supportedCT: barrel_p2p_ormap_SUITE; prop suite
barrel_p2p_hlc (Hybrid Logical Clock)supportedCT: barrel_p2p_hlc_SUITE; prop suite
barrel_p2p_replica replication behaviourbetaCT: the 4 consumer suites + barrel_p2p_map_e2e_SUITE
Periodic anti-entropy (reminder + map)betaCT: barrel_p2p_anti_entropy_e2e_SUITE (off/on convergence)
barrel_p2p_crdt_wire safe gossip ingestsupportedEUnit: barrel_p2p_crdt_wire_tests; CT: barrel_p2p_map_SUITE
barrel_p2p_replica_log (WAL + snapshot store)supportedEUnit: barrel_p2p_replica_log_tests

Operations

FeatureTierCoverage notes
barrel_p2p_rotate:rotate_cert/0,1betaEUnit: barrel_p2p_rotate_tests
barrel_p2p_rotate:rotate_identity/0,1betaEUnit: barrel_p2p_rotate_tests
instrument metricsbetaEUnit: barrel_p2p_metrics_tests
Discovery backends (file, DNS, static)supportedEUnit: barrel_p2p_discovery_tests

Auxiliary

FeatureTierCoverage notes
External relay adapter seamexperimentalDocs only; no committed adapter
Soak suite (BARREL_P2P_CT_SOAK=1)experimentalOne active case; rest is scaffolding
Bench harness (bench/run.sh)experimentalSoft CI regression gate
barrel_p2p:start_service_holder/1experimentalIntegration-test helper; may move out of barrel_p2p.erl

When a feature changes

  • supported → supported (refined): CHANGELOG entry, no version bump required if the change is non-breaking.
  • supported → breaking change: deprecation in one minor, removal at the earliest in the next minor. CHANGELOG entry on both.
  • beta → supported: CHANGELOG entry on the minor that promotes it.
  • beta → breaking: minor bump, CHANGELOG entry, no deprecation cycle required.
  • experimental: changes land without ceremony but should still appear in CHANGELOG when they affect callers.