Skip to content

DL-481

Two-phase attach: a file is uploaded first (CommsService.UploadAttachment, server-validated filename and media type, optional client sha256) and posted second as a new MessageBlock.attachment = 4 (AttachmentBlock) arm; inside AppendMessage the store fills the block from the uploader’s row, inserts, and on a fresh insert only binds the row with message_id IS NULL as the single gate, so an idempotent replay succeeds and a held or stale post can re-bind the same id; an update cannot add, drop or change an attachment; the agent call arms are upload_attachment = 16 and get_attachment = 17

Status: Active (proposed, pending Matt, 2026-10-11)

Record: ../../agent/compass-comms-file-sharing/design.md#d2-the-wire-is-an-upload-rpc-and-a-block-arm