- Shipped
- August 27, 2026 at 2:58 AM UTC
- Author
- Kamo
- Commit
- 2cc6ab2
MemberVoipConfigController.put writes an assignment to two places - MEMBER_VOIP_CONFIG and **************** - and **************** then cleared the second on its next pass. No provider stores Kamo member ids, so listExtensions() reports assignedMemberId=null for every extension, and that null was stored unconditionally. **************** already carried exactly this guard, with a comment explaining why. The sync path never received it. The result in production: assigned_member_id null on all twenty-three extensions while nine members held one. The visible symptom was not billing but the member phone-settings dropdown, which filters out extensions already assigned to somebody else by reading that column - so it excluded nothing, offered a taken extension, and the save failed with a 409 from the controller that does check. Only skips nulls; a provider that does report a member still overwrites.