The current logic (which is equivalent to the helper method @roidrage posted) corresponds to this truth table:

```
+-----------------+----------------+--------+
| matrix finished | build finished | result |
+-----------------+----------------+--------+
|      yes        |       yes      |   no   |
|      yes        |        no      |  yes   |
|       no        |       yes      |   no   |
|       no        |        no      |   no   |
+-----------------+----------------+--------+
```

So `finish` should only map to the `finished` state if the matrix is finished, but the build is not. Is this the intended behaviour (I haven't really put my mind to this issue enough to quite decide whether it is, but it sounds right to me).