AuditBridge version or image digest
main @ 704a08b (unreleased, Cargo.toml 0.1.0)
Steps to reproduce
- Two audit events share the same RFC3339 timestamp (NetBird returns them in
one poll; both are delivered and the per-sink cursor advances to that
timestamp). A third event with the same timestamp arrives in a later poll.
process_cycle filters with strict ts > cursor, so the third event is
dropped permanently — silent event loss.
- An event with an unparseable
timestamp hits the Loki encoding:
timestamp_to_nanoseconds silently substitutes Utc::now(), rewriting the
audit time to "right now", non-deterministically across polls.
src/netbird.rs comments reference the README's "Scaling Limits" section,
which does not exist.
Cargo.toml carries commented-out dependencies (tokio-rusqlite,
rusqlite, dotenvy).
Expected behavior
Events at the watermark boundary are delivered at least once (boundary event
IDs tracked per sink alongside the timestamp). Unparseable timestamps produce a
deterministic fallback and a logged warning instead of silently rewriting to
now(). Code comments match the README; Cargo.toml is clean.
Actual behavior and sanitized logs
pending.retain(|e| ts > last_ts) excludes same-timestamp events forever.
unwrap_or_else(|_| Utc::now()...) substitutes the current time silently.
- Stale reference to a section that was never written.
- Dead commented-out dependency lines.
AuditBridge version or image digest
main @ 704a08b (unreleased, Cargo.toml 0.1.0)
Steps to reproduce
one poll; both are delivered and the per-sink cursor advances to that
timestamp). A third event with the same timestamp arrives in a later poll.
process_cyclefilters with strictts > cursor, so the third event isdropped permanently — silent event loss.
timestamphits the Loki encoding:timestamp_to_nanosecondssilently substitutesUtc::now(), rewriting theaudit time to "right now", non-deterministically across polls.
src/netbird.rscomments reference the README's "Scaling Limits" section,which does not exist.
Cargo.tomlcarries commented-out dependencies (tokio-rusqlite,rusqlite,dotenvy).Expected behavior
Events at the watermark boundary are delivered at least once (boundary event
IDs tracked per sink alongside the timestamp). Unparseable timestamps produce a
deterministic fallback and a logged warning instead of silently rewriting to
now(). Code comments match the README;Cargo.tomlis clean.Actual behavior and sanitized logs
pending.retain(|e| ts > last_ts)excludes same-timestamp events forever.unwrap_or_else(|_| Utc::now()...)substitutes the current time silently.