Question: I've always followed the logic: if assert fails, then there is a bug. Root cause could either be:

* Assert itself is invalid (bug)
* There is a programming error (bug)
* (no other options)

I.E. Are there any other conclusions one could come to? Are there cases where an assert would fail and there is no bug?

Answer: 
If assert fails there is a bug in either the caller or callee. Why else would there be an assertion?
That's a good question.

My feeling is, if the assert fails due to your code, then it is a bug. The assertion is an expected behaviour/result of your code, so an assertion failure will be a failure of your code.