Many thanks for your work on discovering this issue. This gave us an opportunity to do a larger audit of our force-close code, and to decide to frequently spend time re-auditing it. During the early days, I believe there was less discussion between implementations about the test cases that were necessary to handle subtle implementation issues.
We’re trying to do better when introducing new features to the spec: for example for splicing, we’re including test vectors of protocol execution directly in the spec. We also run force-close tests for various edge cases that can be dangerous when doing the initial cross-compatibility tests, which helps share knowledge between implementations: that has already caught bugs before implementations shipped, and I hope this will only get better.
Ideally, having something like lnprototest
widely adopted would be more robust, but it’s quite a complex project to bring to a maturity level where implementations can all benefit from it…