- IssueAttachment link table (issue <-> file) + migration
- GET/POST /issues/:issueId/attachments, DELETE .../attachments/:fileId
- Only own uploaded files can be attached; attach is idempotent
- Registers issues as a file owner: attached files stay visible to issue
participants and are not collected by GC
- IssueDetail.attachments GraphQL field via @ResolveField, issue module untouched
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>