Membership end dates follow what was actually paid
Before 25 September, the nightly check for missed auto-renewals could add a year to a member’s end date when Stripe’s renewal day was only a few days after the date on file — with no payment behind it, and it showed in Money as dues received. Those years are now taken back: each one is marked void (it no longer counts as money anywhere), and the member’s end date goes back to what it was, unless someone has set it by hand or a real payment has since set it. Link Existing Subscriptions now sets each linked member’s end date to the end of the period they have paid for in Stripe, and says how many it changed; pressing it again lines up members linked before. A member whose subscription renews them can’t buy another term on the Join page — it says when they renew, with a link to manage auto-renew — and a check or cash payment from them is recorded as an early payment that leaves their dates and Stripe’s billing day alone. A member with time left who turns auto-renew on is first charged on their end date, not today. People can be sorted by end date, latest first.