https://pantheon.corp.google.com/errors/CPG70I7Svpzy6QE?time=P7D&filter=text:NextCommitPositionPipeline&project=findit-for-me I checked a sample case https://findit-for-me.appspot.com/waterfall/flake?key=ag9zfmZpbmRpdC1mb3ItbWVy1gELEhdNYXN0ZXJGbGFrZUFuYWx5c2lzUm9vdCKfAWNocm9taXVtLndlYmtpdC9XZWJLaXQgTGludXggVHJ1c3R5IExlYWsvMjA3NjUvd2Via2l0X2xheW91dF90ZXN0cy9hSFIwY0M5MFpYTjBjeTlrWlhaMGIyOXNjeTkwY21GamFXNW5MM1JwYldWc2FXNWxMVzFwYzJNdmRHbHRaV3hwYm1VdGQybHVaRzkzTFdacGJIUmxjaTVxY3c9PQwLEhNNYXN0ZXJGbGFrZUFuYWx5c2lzGAEM I find that in the result of https://chromium.googlesource.com/infra/infra/+/refs/heads/master/appengine/findit/pipelines/flake_failure/next_commit_position_pipeline.py#101, lower_bound_build is None because it fell in the case at https://chromium.googlesource.com/infra/infra/+/refs/heads/master/appengine/findit/services/step_util.py#209. In fact there are several cases where lower_bound_build and/or upper_bound_build to be None, so there should be a check somewhere before UpdateSuspectedBuild.