See T13054. After those changes:
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.