Establish the current behavior
Read the callers and tests before selecting an abstraction. Capture representative inputs and outputs, error handling, and relevant side effects. If coverage is thin, add focused characterization cases for the behavior at risk. Avoid locking in every incidental detail; preserve the contract that callers actually rely on.
Choose one structural concern
Extract a repeated transformation, reduce a tangled branch, or move a well-defined responsibility. Ask the assistant to explain why that step reduces complexity. Keep feature changes separate so a reviewer can distinguish a structural improvement from a new behavior. Do not introduce a generic framework for a pattern that appears only once.
Read the diff as a caller
Check public signatures, ordering, failure modes, and resource handling. Run the relevant tests and inspect their results. A smaller file is not automatically a simpler system if the logic has become harder to follow across modules. End with a short explanation of the new responsibility boundary and the evidence that behavior stayed stable.