Build a minimal controlled fixture that retains the condition needed for the failure. Use synthetic or appropriately transformed data and record the setup, input and expected result. If reducing the fixture removes the failure, identify which condition was lost before simplifying further.
Choose the smallest trustworthy boundary that observes the outcome. A persistence or permission problem may need an integration check; a local calculation may not. Assert the behavior through a stable interface instead of replaying implementation steps.
Run the check against the old behavior where it can be recreated. Read the failure: an assertion detecting the wrong result is different from an unavailable dependency or setup exception. Record the revision and evidence, then repeat against the corrected version.
Retain nearby negative cases that could expose an overly broad fix. Add the check to the relevant change path, with an owner and a clear failure message. Keep the triggering state, expected outcome, before result, after result and untested conditions together.