See T13054. After those changes:
Buildables stuck in "building" despite an aborted build should get a best-effort migration if nothing else moots that (see also T10746).
Harbormaster has `BuildCommand` and `BuildMessage`. These are basically the same table. `BuildCommand` is sent to `Build`. `BuildMessage` is sent to `BuildTarget` and `Buildable`. These should probably just be the same table, and `Build` should be a valid receiver for `BuildMessage`.
If you `arc diff --only`, the buildable never leaves `PENDING`. A likely fix for this is to make `arc` call `harbormaster.sendmessage(<buildablePHID>, "build")` after it uploads lint and unit results if it's not going to create a revision. Currently, this method can not send messages to a `Buildable` and probably can't send a `"build"` message.
---
See PHI1380, which wants API access to the `restart` command.