libertaria-stack/features/qvl/gossip_protocol.feature

94 lines
3.6 KiB
Gherkin

Feature: Aleph-Style Gossip Protocol
As a Libertaria node in a partitioned network
I need probabilistic message flooding with DAG references
So that trust signals propagate despite intermittent connectivity
Background:
Given a network of 5 nodes: alpha, beta, gamma, delta, epsilon
And each node has initialized gossip state
And the erasure tolerance parameter k = 3
# Gossip Message Structure
Scenario: Create gossip message with DAG references
Given node "alpha" has received messages with IDs [100, 101, 102]
When "alpha" creates a gossip message of type "trust_vouch"
Then the message should reference k=3 prior messages
And the message ID should be computed from (sender + entropy + payload)
And the message should have an entropy stamp
Scenario: Gossip message types
When I create a gossip message of type "<type>"
Then the message type code should be <code>
Examples:
| type | code |
| trust_vouch | 0 |
| trust_revoke | 1 |
| reputation_update | 2 |
| heartbeat | 3 |
# Probabilistic Flooding
Scenario: Message propagation probability
Given node "alpha" broadcasts a gossip message
When the message reaches "beta"
Then "beta" should forward with probability p = 0.7
And the expected coverage after 3 hops should be > 80%
Scenario: Duplicate detection via message ID
Given node "beta" has seen message ID 12345
When "beta" receives message ID 12345 again
Then "beta" should not forward the duplicate
And "beta" should update the seen timestamp
# DAG Structure and Partition Detection
Scenario: Build gossip DAG
Given the following gossip sequence:
| sender | refs |
| alpha | [] |
| beta | [alpha:1] |
| gamma | [alpha:1, beta:1] |
Then the DAG should have 3 nodes
And "gamma" should have 2 incoming edges
And the DAG depth should be 2
Scenario: Detect network partition via coverage
Given the network has partitioned into [alpha, beta] and [gamma, delta]
When "alpha" tracks gossip coverage
And messages from "alpha" fail to reach "gamma" for 60 seconds
Then "alpha" should report "low_coverage" anomaly
And the anomaly score should be > 0.7
Scenario: Heal partition upon reconnection
Given a partition exists between [alpha, beta] and [gamma]
When the partition heals and "beta" reconnects to "gamma"
Then "beta" should sync missing gossip messages
And "gamma" should acknowledge receipt
And the coverage anomaly should resolve
# Entropy and Replay Protection
Scenario: Entropy stamp ordering
Given message A with entropy 1000
And message B with entropy 2000
Then message B is newer than message A
And a node should reject messages with entropy < last_seen - window
Scenario: Replay attack prevention
Given node "alpha" has entropy window [1000, 2000]
When "alpha" receives a message with entropy 500
Then the message should be rejected as "stale"
And "alpha" should not forward it
# Erasure Tolerance
Scenario: Message loss tolerance
Given a gossip DAG with k=3 references per message
When 30% of messages are lost randomly
Then the DAG should remain connected with > 95% probability
And reconstruction should be possible via redundant paths
# Performance (Kenya Rule)
Scenario: Gossip overhead
Given a network with 1000 nodes
When each node sends 1 message per minute
Then the bandwidth per node should be < 10 KB/minute
And the memory for gossip state should be < 1 MB