- Shipped
- October 18, 2026 at 5:19 AM UTC
- Author
- Kamo
- Commit
- d854086
Owner 2026-10-15: "remove it and add it to a do-not-block list" (the company's own main line had been put on the do-not-contact list by a test call). For an organization's own numbers and staff lines, so a test call or a misheard phrase never blocks them. - DO_NOT_BLOCK (unique ORG_ID, CHANNEL, ADDRESS; CHANNEL CALL | SMS | EMAIL | ALL, ALL = a phone number's calls and texts, an address's email) and the append-only DO_NOT_BLOCK_EVENT trail (ADDED, REMOVED with its required reason, SKIPPED). - DoNotBlockList: add (idempotent; refused while the do-not-contact list holds the address on a covered channel: remove it there first, with a reason), removeById (reason of 3+ characters), protecting/isProtected, search, history, activity, entriesFor, recordSkipped. - DoNotContactList now takes the DoNotBlockList (constructor change; VOIPService, EmailService and kamoai-service declare both beans in the same push): find/isBlocked/filterBlocked never block a protected address on its channels; add() of a protected address SKIPS an automatic opt-out (VOICE_OPT_OUT, SMS_STOP, EMAIL_UNSUBSCRIBE) with a SKIPPED note and Added(null, false, keptBy), and REFUSES a person's add (MANUAL, IMPORT) with field doNotBlock and the sentence "{address} is on the do-not-block list for {channel} ({note}), so it can't be added to the do-not-contact list. Take it off Settings -> Phone -> Do not block first." DDL: voipservice **************** (applied 2026-10-18 04:16Z). Tests: DoNotBlockListTest (7, RED: did not compile on origin/main), DoNotContactListTest, **************** (both repositories' finders), SharedLibBeanSafetyTest.
