User suspects ship.sh does not work for multiple targets. Inspect script logic and run a safe mocked execution (stub lint/bild/push.sh) to confirm argument handling and per-target push loop behavior.
Clean summary: ship.sh supports multiple targets. Verified from code and by mocked run. Behavior with args A B C is: lint A B C, then bild --test A B C, then push.sh A, push.sh B, push.sh C. Also verified no-arg interactive multi-select path yields the same fan-out. If deployment fails, root cause is likely one target failing inside lint/bild/push rather than ship.sh dropping extra targets.
Confirmed ship.sh handles multiple targets correctly. Read Omni/Ide/ship.sh and ran safe mocked executions (stub lint/bild/push.sh): with explicit args it called and , then invoked Usage: push.sh <target> target.nix -> NixOS deploy target.py/.hs/.. -> Service deploy --images -> Build and push agent images once per target in order. Also simulated no-arg interactive multi-select path (mock fd+fzf): same behavior. So multi-target flow itself works; failures are likely from a specific target command failing (lint/bild/push) rather than argument fan-out.