Isolate a Regression by Dropping Down the Layers
To find where a regression lives, strip layers until it reproduces with the fewest moving parts, but if the input is contaminated, every layer lies the same way.
The image processing service’s GIF frame-count test went red. We peeled layers from the top: app → wrapper → raw CLI → version bisect (binary-searching releases to find which one broke). Every layer was red. Four layers pointing at “libvips 8.18 regressed” (broke something that used to work). It felt like four independent pieces of evidence, but it was one.
To find where a regression lives, strip layers until it still reproduces with the fewest moving parts:
Each rung you descend clears a suspect. When the raw tool reproduces the bug on a minimal input, your code and the wrapper are exonerated.
The blind spot: vary the INPUT too. Layer-drop holds the input fixed and moves the code. If the input is contaminated, “raw tool still broke → upstream” is a false exoneration. The tool did the right thing on a bad input.
Every rung you descend narrows the code axis and feels like progress, but the whole left column is one contaminated cell repeated four times. Four agreeing rungs are not four pieces of evidence; they’re one piece of evidence counted four times.
Layer-drop is powerful, but it only walks the code axis. Pair it with input variation (swap to a production-shaped input and re-check) to avoid drilling deeper in the wrong dimension.
Sources:
Related: Back to the chain reaction overview, or continue to contaminated test oracles and GIF encoders merging frames.