Well if I flip the statements (soldier above archer) then only the archers listen. So individually they work, but only the last of the two is being used.
You can only say one thing per frame, so the last one is overwriting the first. You could try alternating which command you’re saying once per second based on this.now(). (But it’s things like this that made us abandon the say API for commanding troops in favor of the command API used in Greed and Sky Span.)