Persona saves a named attachment into her sandbox (BIFROST_CHAT_FETCH, off by default) #64
Loading…
Reference in a new issue
No description provided.
Delete branch "eureka/persona-save-attachment"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
The Persona's saver for the mouth's attachment fetch: on her turn the Persona may name one image in a room she can say in; Huginn asks the mouth (
chat_fetch_request.v1), loads the stored bytes, re-verifies them (hash, type, bounds), and saves them into her sandbox under a hash-named file (0600 in a 0700 dir, no symlink follows,O_EXCLtemp then link); a failed save is told to her in her own next turn. Specs:eureka-body:cut_spec:cut-persona-save-attachment.r7(withcut-mouth-fetch-attachment.r7, Bifrost PR #73 merged asd4365a8). Reportscut-persona-save-attachment.h1,.h2.State
BIFROST_CHAT_FETCH, exactly1enables; off: no request, no schema property, a reply naming the field is refusedOutOfBounds).ecf147d(clean, no conflicts; main'spersona.rs/self_run.rschanges merged automatically); tests rerun after the rebase:mind-body --lib972 passed, 1 ignored;chat_rudp22;dependency_graph1;public_surface2 (underunshare -r; the control/persona tests refuse a tmpdir not owned by root otherwise).persona-chat-v9fixtures are byte-identical to Bifrost'spersona-chat-v7atd4bccd4(diff -r, sha256).Receipt meaning (accepted,
eureka-body:follow_up:receipt-outlives-failed-save)The
file_receivedreceipt means only that the mouth fetched and stored the file for her; it does not prove the file reached her sandbox. A failed save leaves the receipt standing and she is told the save failed. Sentence is inattachment.rs's module doc.Open
refusal-told-as-unanswered(a typed refusal other thanUnknownKindis told as "may or may not have gone through"; inherited fromopen_direct),part-name-linked-by-name(linkattakes the.partname, so her own shell could swap the file betweenfsyncandlinkat; her own sandbox only).cfg(windows); no target here).cargo-mutantsran onpersona.rs,chat_client.rsandchat_image.rs(zero survivors) andattachment.rs(the survivors are equivalent or in the Windows/crash-seam arms).d4365a8,root-list-mouth-fetch-20261112.mdsteps A and B) and on Void's 'fetched for' wording in the client; both ineureka-body:follow_up:huginn-flag-gates.🤖 Generated with Claude Code
Config.fetch (exactly "1", read in from_args_and_env through the lookup), SaveAttachment {room, event} on PersonaReply with the tempo_vote_beat_s present() pattern, a conditional unrequired schema property, SAVE_FAULT refusal when the flag is off or the room/event is out of bounds, Step::Answered carries zero to two notice lines (open, then save), and a gated fetch step: NoStore decided before any request, the saver called with the receipt's room id, one fixed line per outcome with the relative path only on success. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>