"A composer missing any of the three is an incomplete implementation, not a simplified one."
Three Capabilities, Every Surface
Every input surface in Vesta — the stream composer, the crumb editor, the draft source editor, any future capture sheet — carries the same three capabilities. Attachments (image, PDF, file). Prompt Macro (a preview-first projection over your local draft). Ask Pippa (a bound canonical conversation). This is inherited from Waystone and stated as an invariant for a reason: a composer that ships two of the three isn't a lighter version, it's a broken one. The trio is the baseline of what 'composing in Vesta' means, and dropping a leg quietly changes the product.
Attachments Must Resolve to Real Bytes
The attachment leg carries the sharpest invariant in the whole trio, inherited from PippaGo: an attachment must resolve to actual bytes plus a media type — a filename-only payload and a silent text-only fallback are forbidden. The reason it's stated as a hard rule is that the failure is invisible at the call site. If a composer sends the string 'photo.jpg' instead of the image's bytes, nothing errors — the request goes out, a reply comes back, everything looks fine — except Pippa never actually saw the picture and quietly answered as if it were a text-only message. A bug you can see gets fixed; a bug that looks like success ships. So attachment resolution is enforced, not hoped: bytes and media type, or the attachment is rejected loudly.
Prompt Macro: Preview-First, Never a Second Brain
The Prompt Macro leg runs a saved instruction over your local draft and shows you a preview — it never mutates the draft before you accept, and it never grows into a second Pippa engine. Two fields stay separate: the macro's instruction (what to do) and the composer's input text (the material). Keeping them apart is what lets a macro be reusable across drafts and keeps 'the thing I'm writing' distinct from 'the transformation I'm asking for'. It's a projection over your draft, offered for approval — same consultation posture as assembly, at the composer scale.
Ask Pippa: A Bound Conversation, Not a Crumb
The Ask Pippa leg binds each typed context to one or more ordinary canonical cwkPippa conversations, marked origin_surface='vesta' and projected into a server-owned VESTA folder. The whole point of the boundary: an Ask Pippa thread is a conversation, not a crumb. Its full history, attachments, tools, and transcript stay cwkPippa-owned; Vesta holds only the binding. You can ask Pippa about a day without that question becoming an entry in the day — the consultation and the journal stay cleanly separate, and the brain stays canonical rather than forked into the journal.