The ffx product-bundle bisect command helps identify regressions in product
bundles by bisecting over assembly artifacts.
Concepts
When a bug or behavior change occurs between two versions of a product bundle,
ffx product-bundle bisect can help pinpoint which specific artifact
(platform, board, or product) introduced the change. It does this by:
- Generating a list of released versions between a known-good version
(
--from-success) and a known-bad version (--to-failure). - Assembling intermediate product bundles using combinations of artifacts from different versions.
- Facilitating tests on these intermediate bundles to determine if they pass or fail.
By using a binary search (or median cut) approach over the artifacts, the tool quickly narrows down the source of the regression.
Usage
You can run the bisection manually by following the prompts from the tool.
Manual Bisection
To start a bisection between two known versions of a product bundle, run:
ffx product-bundle bisect <name> --from-success <version> --to-failure <version>Replace <name> with the name of the product bundle (e.g., core.vim3) and
<version> with the product bundle version numbers.
The tool will assemble intermediate bundles and prompt you to test them. After testing, you inform the tool whether the step passed or failed, and it calculates the next step.
Pausing and Resuming
You can pause the bisection process at any time by pressing CTRL+C. The
tool saves its state. The next time you run the exact same
ffx product-bundle bisect command, it will ask if you want to continue
the previous run or start over.
Options
Detailed options for ffx product-bundle bisect:
--from-success: Known-good version of the product bundle.--to-failure: Known-bad version of the product bundle.--slot: Slot to bisect over (aorr). Defaults to slota.--out-dir: Directory to write assembled images and other artifacts. Defaults to~/plan_directory/out.--gen-dir: Directory to write intermediate files. Defaults to~/plan_directory/gen.--auth: Authentication method to use for fetching artifacts.
Examples
Bisecting a product bundle manually:
ffx product-bundle bisect core.vim3 \
--from-success 29.20250826.6.1 \
--to-failure 29.20250905.6.1