feat(p9): thread purpose + persist consent receipt through OutboundService

Task S2.2: OutboundService.send gains an optional purpose, passes it to the broker,
and persists the returned consentReceiptRef on IiosOutboundCommand (new nullable
column, migration outbound-consent). RouteService.execute passes 'route_forward';
calendar reminders pass 'meeting_reminder'. CMP-DENY → command BLOCKED, no send.
2 tests: receipt recorded on allow, purpose-DENY blocks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-02 21:26:01 +05:30
parent 2223d7a891
commit cdc59be481
6 changed files with 35 additions and 6 deletions
@@ -178,6 +178,8 @@ export class CalendarService {
`meeting:${meeting.id}`,
{ text: `Reminder: "${meeting.title}"` },
`meeting-reminder:${meeting.id}`,
meeting.scopeId,
'meeting_reminder',
);
for (const p of meeting.participants) {
if (!p.actorRefId) continue;