In this section: Use Cases
Legacy Codebase Modernization
Somebody on the team inherited a system nobody currently working on it originally built. That's the starting condition for most legacy modernization work, and it explains why so much of it goes sideways. The people who understood why the retry logic works the way it does, or why that one service calls an internal API instead of the obvious external one, left the company two reorgs ago. What's left is code that runs correctly and explains nothing.
The default response is usually a rewrite, and it's an understandable one. But a rewrite spends months of senior engineering time and produces a system that's cleaner without being any more legible, because the tribal knowledge that made the old system dangerous to touch never made it into the new one either. Nobody wrote it down the first time, and a rewrite project rarely has a mechanism to force that writing-down to happen along the way.
C-DAD's answer starts smaller. Run cdad check against the current system to get an honest baseline, thencdad roadmap to see which capabilities are both risky and frequently touched, the ones where an unsafe change would actually hurt. Extract and contract those first withcdad init, validate them withcdad validate --all --strict before anything merges, and use cdad graph to see how the pieces you've extracted connect to the pieces you haven't gotten to yet.
This doesn't produce a modernized system on day one, and it isn't trying to. It produces a system that gets safer to extend one capability at a time, with the riskiest parts addressed first instead of last, which is usually the opposite order a big rewrite ends up tackling them in once the schedule gets tight.