So just to be clear, what we can do is while we traverse is to save on the side any “bad” bundle that leads to a negative state. After we are done applying all the “good” bundles to the state we can try to apply the “bad” ones again.
We repeat the process until the “bad” bundles set size stops changing.
This adds overhead, but I think we should allow temporary overdrafts. Especially if the order of the bundles is not defined by the tangle DAG.
Also, the way we do conflict detection is dependent on whether we do reusable addresses (with Hybrid signatures: Combining WOTS with hashed public keys - #10 by wolfgang.welz). In the meanwhile I will create an issue on github that ignores the reusable address portion…