---
id: UJ-013
title: Collaborate on a task with messages and attachments
actors: [tenant staff user]
surface: app.zync.is/tasks/:id
goal: Keep task discussion and files attached to the work item.
trigger: User opens task detail and needs to communicate or share context.
preconditions:
  - User can read the task and has message/attachment permission.
success_state: Message/attachment is persisted, visible to permitted collaborators, and included in task history.
source_specs:
  - docs/specs/2026-05-30-tasks-detail-communication.md
  - docs/specs/2026-05-31-unified-attachments.md
  - docs/specs/2026-05-31-real-time-infrastructure.md
---

## Happy path

1. User opens task detail → Zync loads task, permitted thread, and attachment metadata.
2. User writes a message, mention, or rich-text update → server validates allowed content and appends a task message.
3. User uploads an allowed file → Zync validates size/MIME, stores it under tenant/task scope, and returns an authorized signed access link.
4. Collaborators receive realtime/notification update → each client refreshes from durable task state.
5. User downloads or views attachment → ownership/permission check runs again at access time.

## Alternate and failure paths

- Task inaccessible, message invalid, attachment too large/unsupported, signed URL expired, or realtime delivery unavailable → preserve durable state and show a retry/reload path.
- Task is closed/archived → edits follow task lifecycle policy; no silent mutation.

## Permissions and boundaries

- Realtime events are hints; API reads remain authoritative.
- Attachments are never public by default and cannot be used to cross tenant/task scope.

## Source specs

- `docs/specs/2026-05-30-tasks-detail-communication.md`
- `docs/specs/2026-05-31-unified-attachments.md`
- `docs/specs/2026-05-31-real-time-infrastructure.md`
