feat(email): email mentions, shares and task notices through qbit-email #15

Merged
KofTwentyTwo merged 3 commits from feature/email-qbit into develop 2026-10-14 13:27:26 +00:00
KofTwentyTwo commented 2026-10-14 04:13:10 +00:00 (Migrated from github.com)

Phase (d) of the qbit-email design (QRun-IO/qbit-email docs/DESIGN.md section 11).

Adds EmailCollaborationNotifier: mentions, shares and task notices (assigned, reminder, overdue) as NOTIFICATION email through qbit-email (templates collaboration_mention, collaboration_share, collaboration_task_reminder), one recipient per message, idempotency collaboration:::. Emails never contain comment bodies, task titles, notes or share messages: "X mentioned you on " with a link, and the real label only when the recipient may read it and FieldAccessHelper.isRecordLabelFullAccess allows (generic label otherwise). It becomes the default notifier when qbit-email is produced and no notifier is configured; NoOp otherwise. CollaborationNotification gains optional sourceId and actorUserId. withRecipientEmailResolver hook; default address from collaboration_person.email. 93 tests (6 new).

qbit-email is an <optional> dependency at 0.1.0-RC.1 (property qbit-email.version); every qbit-email reference is in one adapter class behind a Class.forName + EmailRuntime.config(qInstance) guard. Uses qbit-email 0.1.0-RC.1 from Maven Central; ./mvnw verify is green against it.

🤖 Generated with Claude Code

Phase (d) of the qbit-email design (QRun-IO/qbit-email docs/DESIGN.md section 11). Adds EmailCollaborationNotifier: mentions, shares and task notices (assigned, reminder, overdue) as NOTIFICATION email through qbit-email (templates collaboration_mention, collaboration_share, collaboration_task_reminder), one recipient per message, idempotency collaboration:<kind>:<source id>:<user>. Emails never contain comment bodies, task titles, notes or share messages: "X mentioned you on <label>" with a link, and the real label only when the recipient may read it and FieldAccessHelper.isRecordLabelFullAccess allows (generic label otherwise). It becomes the default notifier when qbit-email is produced and no notifier is configured; NoOp otherwise. CollaborationNotification gains optional sourceId and actorUserId. withRecipientEmailResolver hook; default address from collaboration_person.email. 93 tests (6 new). qbit-email is an `<optional>` dependency at `0.1.0-RC.1` (property `qbit-email.version`); every qbit-email reference is in one adapter class behind a `Class.forName` + `EmailRuntime.config(qInstance)` guard. Uses `qbit-email` **0.1.0-RC.1** from Maven Central; `./mvnw verify` is green against it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.