ed0d4dae80
Task T3.2: AiJobService.getArtifact/accept/reject assertOwns on artifact.job.scopeId; listArtifacts scoped to caller. CalendarService.getMeeting/setConsent/generateTranscript/ summarize/listActionItems assertOwns on meeting.scopeId (optional principal → asserts when supplied by a controller, skipped for internal calls). MessageService.getMessageById gains the same optional fence. Controllers thread the principal through. All 46 ai/calendar/routing/messaging tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>