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

bedrock-kv / bedrock / 9b4b2676c3961dd4c876a19c751e7e567fe4fd27
82%

Build:
DEFAULT BRANCH: develop
Ran 25 Aug 2026 09:30PM UTC
Jobs 1
Files 217
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

25 Aug 2026 09:29PM UTC coverage: 78.457%. Remained the same
9b4b2676c3961dd4c876a19c751e7e567fe4fd27

push

github

web-flow
hunt-dead-code: index defprotocol, root from config, fix --root (#221)

Analyzer upgrade for the `hunt-dead-code` skill from #217. Separate from
#220,
which is now pure module deletions.

Closes bedrock-18e.

## Two real defects

**`defprotocol` was not indexed.** A protocol defines a module, but it
is not a
`defmodule` — so a protocol file owned no name in the graph and *no
reference to
it could resolve*. It read as unreachable however many callers it had.

`lib/bedrock/type_coercion.ex` is the local case: it holds
`Bedrock.ToKeyRange`
and `Bedrock.ToKeyspace`, called from `keyspace.ex`, `repo.ex` and
`directory.ex`, and was still reported as public API with no internal
caller. It
escaped being *proposed for deletion* only because it happens to sit in
the
`public_api` root list — a protocol outside that list would have been a
straightforward false positive. `defimpl` bodies are walked for
references but
define no name worth tracking; an impl lives or dies with its protocol.

**`--root` did not work.** `mention_index` re-read each file by the
*relative*
path stored on the struct, which resolves against the cwd. The flag
silently
analyzed whichever tree the shell happened to be in, reading same-named
files
out of the wrong checkout rather than failing. Call names are now
captured at
parse time while the absolute path is still in hand — which fixes the
flag and
drops a redundant second parse of every file.

Verified: `--root` from an unrelated cwd is now byte-identical to
running
in-tree.

## Generalization for use across projects

None of this changes results here; it is inert in this repo and
documented in
`reference.md` so the analyzer stays layout-agnostic:

- modules named only in `config/*.exs` are rooted automatically (this
repo has
  no `config/`)
- `roots.exs` paths accept globs, so one dynamically-dispatched family
is one
  entry with one reason
- `alias __MODULE__.Types` resolves in alias position as well as
reference
  position — the shape A... (continued)

6781 of 8643 relevant lines covered (78.46%)

1040.33 hits per line

Jobs
ID Job ID Ran Files Coverage
1 9b4b2676c3961dd4c876a19c751e7e567fe4fd27.1 25 Aug 2026 09:30PM UTC 217
78.46
GitHub Action Run
Source Files on build 9b4b2676c3961dd4c876a19c751e7e567fe4fd27
  • Tree
  • List 217
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 9b4b2676 on github
  • Prev Build on develop (#F54436CE...)
  • Next Build on develop (#6C58CD94...)
  • 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