- find bug
- write new test to expose it
- bisect commits, running new test each time
- find culprit commit
- stop bisecting, fix bug
- when the test passes, you know bug is fixed.
- find bug
- write new test to expose it
- bisect commits, running new test each time
- find culprit commit
- stop bisecting, fix bug
- when the test passes, you know bug is fixed.
If a test started failing, I could annotate it as an xfail with an open-ended version pattern. If I noticed that an xfail started passing, making it a upass (I think these were blue in our tests results), I put an upper bound on the xfail version pattern.
The nice thing about this was that I could always run the latest and greatest suite against any version, although it made it a little more complicated to run them as they existed when they were first run.
In general, I want to store one or more services and a first/last valid commit for each one as metadata for each test so that my framework knows which ones to run based on the environment under test. Haven't added this feature yet though.
- write new tests to expose it, but not commit the tests
- bisect commits, running new tests each time
- find culprit commit
- stop bisecting, fix bug
- Look for similar bugs nearby, and ways to improve the new tests, now I know the root problem.
- Figure out the best series of commits for the tests and fixes together, that will be easiest to review by my colleagues/future me/alien archaeologists.
- Send PRs/commit to main.