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.
A class that nothing names except a string looks unreachable. CodeLaser follows class names written as strings, once the methods that read them are declared, so it does not report as dead what a string still reaches.
What is left is out of reach of any static analysis — a name assembled at run time, a class a framework finds by scanning. That 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.
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 plan you build once.
That plan 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.
Measured
Tested against Claude Code on four open-source projects.
Same projects, same list of roots. The engine finished each in under seven minutes, and every result was clean. Claude took 8 to 14 times as long, and in five of its six attempts its changes compiled but broke a build, a test suite or a public API.
