Dead code

We find and remove dead code with the full power of the engine.

Finding it draws on the whole resolved model — every type, every reference, every entry point. Removal is model-based: every consequence is accounted for, the cut itself is surgical, and what it leaves behind gets pruned and simplified. You can validate and approve at every step, from whole clusters down to a single member.

How removal works

A removal is three kinds of change.

Cascade

Deadness is transitive. A dead class takes with it everything nothing else reaches: its callees, its fields, the interface it was the last to implement. We compute that closure and remove it as one cluster.

Repair

What stays has to be made correct again: call sites, overrides, signatures, imports. Each edit comes from the resolved types, so the right one differs at every site.

Pruning

Removal leaves things that can be simplified: a parameter with one value left, an interface with one implementer, a wrapper around nothing. Those come as proposals.

Review

You go through it cluster by cluster.

Some links are never written down — a class loaded from a string, a name assembled at run time. No static analysis finds those, which is why findings go past a person before anything is removed.

Every cluster comes with what it was derived from. In the viewer you can see what one contains, follow how its removal would propagate, and mark it to keep, to delete, or to come back to.

Those decisions are carried across runs, so nothing you have already judged is asked twice. Take a batch now and leave the rest — that is what makes it something a team can work down gradually.

Dead code clusters beside the source they refer to
A cluster, the source behind it, and the graph of what it holds.
The detection flow that produces the findings
Detection is itself a flow, so the same run repeats on demand.

Recurrence

It accumulates every sprint.

A feature flag retired, a caller deleted, an experiment abandoned. The work is never finished. The first pass is a project; everything after it is a flow you build once.

That flow runs detection on whatever schedule suits you and classifies what comes back. Findings that match a decision you have already taken need nobody. The rest are surfaced. You decide where that line sits.

Classified

Each finding is matched against the decisions already taken and the pattern it fits.

Handled

Categories you have cleared before can go without being asked about again.

Surfaced

Anything new, and anything near an entry point, goes to a person.