Semantics of changeMemberAddress
It is clear that when changing a member address that bounce_info for the old address and an old address delevery_status of BYBOUNCE should not be carried forward to the new address.
However, if delivery for the old address is disabled BYADMIN or BYUSER and this is a straight change of address (i.e., nodelete = False), delivery most likely should remain disabled. There is a bug report from a user who was surprised when a global change of address resulted in enabling delivery for a high volume list.
OldStyleMemberships.py has been changed so that if nodelete is False and delivery_status is BYUSER or BYADMIN, this is set for the new address. In all other cases the new address has delivery status ENABLED. In all cases the new address has no bounce_info. Other MemberAdaptors should be consistent with this.
Semantics of setMemberOption(member, mm_cfg.Digests, value)
Currently, when OldStyleMemberships.setMemberOption() sets a member from digest to regular, it adds the member to the list's one_last_digest dictionary. It doesn't remove the member from one_last_digest upon changing from regular to digest.
Thus, if a member is changed from digest to regular and then changed back before the next digest, depending on the MTA and VERP settings, the member may receive two copies of the next digest. This is not serious, but I think a MemberAdaptor should be symmetrical with respect to one_last_digest. I've changed OldStyleMemberships.py to behave this way.