Skip to content

cli: --device-matrix to run flows across several devices in one go (TB-375) - #35

Merged
jochen-testingbot merged 1 commit into
mainfrom
feat/TB-375-device-matrix
Sep 2, 2026
Merged

cli: --device-matrix to run flows across several devices in one go (TB-375)#35
jochen-testingbot merged 1 commit into
mainfrom
feat/TB-375-device-matrix

Conversation

@jochen-testingbot

Copy link
Copy Markdown
Contributor

Stacked on #34 (TB-374); retarget to main once it merges.
Pairs with web repo branch feat/TB-375-atomic-run-capabilities (run endpoint validates every capability before creating any run). The CLI works against the current server too, but an invalid cell then still creates the valid runs.

Summary

  • --device-matrix "<device>[:<version>][:real]", comma-separated or repeatable. Each cell is exactly one device (no cross-product, since not every device exists in every OS version). All cells are sent as one capabilities array, so one project fans out into one run per device with its own results, live table rows, dashboard link, --json device block and per-device --retry.
  • --real-device (or an .ipa app, which implies it) applies to every cell; --device / --deviceVersion alongside a matrix are rejected, as are duplicate cells.
  • Before submitting, the CLI prints Device matrix: N devices × M flows = K flow runs and the cell list.
  • status --wait no longer cancels runs on Ctrl-C. It watches a project it did not start; the foreground maestro command keeps its cancel-on-interrupt behaviour. Found during verification when a killed watcher cancelled one cell of a live matrix.
  • README: device matrix section and flag row.

Jira: TB-375 (epic TB-370).

Test plan

  • npm test — 726 passed (10 new: cell parsing, capability list, validation, submit payload + summary, server rejection, real-device propagation, watcher signal handling)
  • npm run lint, npm run build
  • Dry run: --device-matrix "iPhone 17 Pro:26.5,iPhone XR:18.7" shows both capabilities with realDevice from the .ipa
  • Live: project 91721 with cells iPhone XR:18.7 and * → two runs (iPhone XR, iPhone 13 18.5) under one project; status lists both with per-device verdicts and exits 2 when one is not green
  • Live matrix with an invalid cell against the deployed atomic run endpoint → no runs created

--device-matrix "<device>[:<version>][:real]" (comma-separated or
repeatable) submits one capability per cell in a single run request, so
one project fans out into one run per device with its own results, live
table rows and dashboard link. No cross-product: each cell is exactly one
device. --real-device (or an .ipa app) applies to every cell; --device and
--deviceVersion are rejected alongside a matrix. The CLI prints
devices × flows before submitting.

Also: status --wait no longer installs the cancel-on-interrupt handler.
It watches a project it did not start, so Ctrl-C now detaches instead of
stopping the runs (a killed watcher cancelled a live matrix run during
verification).

Pairs with the web change that validates all capabilities before
creating any run, so an invalid cell never yields a partial matrix.
@jochen-testingbot
jochen-testingbot changed the base branch from feat/TB-374-dropin-flags to main September 2, 2026 12:33
@jochen-testingbot
jochen-testingbot merged commit 9f59f4d into main Sep 2, 2026
6 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant