Abstract base classes, hooks, configuration knobs, or parameters with no real call site exercising them — the agent must learn vocabulary it never gets to use.
The code expresses exactly what it does today; the agent's mental model has no concepts that don't correspond to active behavior.
Smellier version
class Strategy { execute() {} }class OnlyStrategy extends Strategy { execute() { /* the real one */ } }new OnlyStrategy().execute();
Fresher version
function execute() {// the real one}execute();
Tests cover branches no one exercises; readers (human and agent) learn dead vocabulary; refactoring proposals must consider phantom users that aren't real.
Removing speculative scaffolding is sometimes a real loss — the abstraction may document a coming feature or a deliberately-preserved seam; the agent collapsing it must verify no current or imminent caller relies on the option.
Smaller surface; fewer concepts the agent must hold in its reasoning context; tests align with actual behavior so green tests mean live coverage.
Collapsing every unused hook on sight removes options the team had reason to hold; the agent must judge intent before deleting, or risk shipping cleanups the maintainers reject.