• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

bedrock-kv / bedrock / 057755a83665350837fee918f3e2a6ded58e1a30
73%

Build:
DEFAULT BRANCH: develop
Ran 14 Jul 2026 08:29PM UTC
Jobs 2
Files 215
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

14 Jul 2026 08:28PM UTC coverage: 71.926% (+0.6%) from 71.285%
057755a83665350837fee918f3e2a6ded58e1a30

push

github

web-flow
Add behavioral tests for Basalt Logic fetch waitlist and recovery lock (bedrock-8dc) (#84)

## Summary
- Adds `basalt/logic_test.exs` with 18 tests bringing `Basalt.Logic`
from 82.2% to **100% coverage**: shutdown (asserts the dets table
actually closes), lock_for_recovery epoch guard + puller teardown, all
five `try_fetch_or_waitlist` branches with exact returns, waitlist
notification round-trips via real `GenServer.reply` from-tuples, and the
live `apply_and_notify` pull pipeline driven deterministically by a
minimal FakeLog (drain-signal ordering, no sleeps)

## Bug found (audit-confirmed, ticket filed)
`unlock_after_recovery` sends `{:transactions_applied, version}` via
`send(self(), ...)` **inside the puller Task closure** (logic.ex:70), so
the notification goes to the task's own mailbox — the server's
`handle_info` for it is dead code. Consequences: waitlisted basalt
fetches are never notified (clients hang until their own call timeout),
waitlist entries leak in server state, and the task mailbox grows
unboundedly. Olivine avoids this by capturing `main_process_pid =
self()` before the closure. Two-line fix + a server-level regression
test tracked in the follow-up ticket.

Also flagged: `Database.fetch`'s `:key_out_of_range` clause matches a
`key_range` field the `%Database{}` struct doesn't have (unreachable
with real structs), and basalt never wires up waitlist deadline expiry.

## Test plan
- 18/18 green at multiple seeds; full basalt dir 118/118; full suite
(2364 tests, 158 properties) green
- Independently audited: deterministic (FakeLog ordering verified
happens-after apply), no defects

Ticket: bedrock-8dc

5639 of 7840 relevant lines covered (71.93%)

1998.27 hits per line

Coverage Regressions

Lines Coverage ∆ File
3
87.5
-5.0% lib/bedrock/data_plane/materializer/basalt/pulling.ex
1
95.65
-4.35% lib/bedrock/data_plane/materializer/telemetry.ex
Jobs
ID Job ID Ran Files Coverage
1 057755a83665350837fee918f3e2a6ded58e1a30.1 14 Jul 2026 08:29PM UTC 215
71.93
GitHub Action Run
2 057755a83665350837fee918f3e2a6ded58e1a30.2 14 Jul 2026 08:29PM UTC 215
71.93
GitHub Action Run
Source Files on build 057755a83665350837fee918f3e2a6ded58e1a30
  • Tree
  • List 215
  • Changed 6
  • Source Changed 0
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 057755a8 on github
  • Prev Build on develop (#9AD43326...)
  • Next Build on develop (#3385CE0D...)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc