Define completeness at the right layer
A raw feed can contain duplicate packets, data shreds, coding shreds and fork-specific observations. One missing packet does not necessarily imply one missing transaction because erasure recovery may reconstruct data. Conversely, a high packet count does not prove complete useful coverage. Define what the consumer must reconstruct.
Keep a layered scorecard
| Layer | Record |
|---|---|
| Transport | Receive bytes, socket drops, malformed packets, duplicate identities |
| Reconstruction | Slots attempted, recoverable sets, missing fragments, decoder errors |
| Transactions | Recovered transaction identities and parsing success |
| Chain reconciliation | Which relevant finalized blocks and transactions were later verified |
Separate unavailable observations from genuinely missing expected records. A skipped slot is not an omitted produced block.
Run a bounded trial
- Choose a time window and the same program or block scope as the production consumer.
- Capture raw counters and reconstruction output with monotonic timestamps.
- Use a separate confirmed/finalized RPC or block source to enumerate relevant produced blocks afterward.
- Compare recovered transaction identities, then investigate whether gaps originated in transport, recovery, decoding or scope.
Test operational failure
Restart the receiver and induce a brief disconnect under controlled conditions. Record how the pipeline identifies the gap and whether supported historical sources can repair the application dataset. Do not assume a raw UDP feed replays old packets. Preserve the unresolved set and capture window in the trial report. An absent shred alone does not establish a provider fault.