Skip to content

Add message-bound image and file attachments (JVNAUTOSCI-2756) - #650

Merged
witbrock merged 6 commits into
mainfrom
codex/von-5d98ca3076e14d25
Sep 13, 2026
Merged

witbrock merged 6 commits into
mainfrom
codex/von-5d98ca3076e14d25

Conversation

@witbrock

@witbrock witbrock commented Sep 12, 2026 •

Copy link
Copy Markdown
Member

Users can paste images, drop files and use the file picker in Messages and ordinary Von chat. Attachments stay bound to the submitted message or turn, preserve captions and original bytes, and support attachment-only sends. JVNAUTOSCI-2756.

Merge decision: ready. The previously missing normal-chat and recipient-handoff evidence is now available; no demonstrated material attachment regression remains.

Change

  • Reuse the existing private file-copy/blob store and pending composer for general files, previews, removal and upload retry. Uploads no longer create unrelated chat turns; workflow file-copy binding is preserved.
  • Persist server-validated attachment descriptors. Direct-message downloads check canonical participation and exact message/file membership without widening the original file's audience. Deleted-message reads and archive-copy forwarding are denied; lost-response send retries reuse the original delivery.
  • Hydrate supported images and bounded UTF-8 text/JSON for receiving providers. Prepare original bytes for the existing Codex inbox and resumed-task handoff, with explicit unavailable/unsupported limitations.
  • Preserve current main's controller context, task-image evidence, navigation and footer changes through the merge.

Validation

  • 252 targeted backend tests passed across attachments, existing images, message services/routes/MCP, uploads, queue, inbox and worker; 46 frontend tests passed. Changed frontend modules passed static lint; browser scripts passed syntax and diff checks.
  • Authenticated disposable Alice/Bob browser replay passed Messages paste/drop/picker, caption plus attachment, attachment-only, remove-before-send, upload failure/retry, lost-send-response retry with reused:true, exact recipient original bytes, owner-only URL/substituted-file denial, refresh/reopen and desktop/360px controls.
  • Real normal-chat generation with OpenAI Luna (reasoning_effort=none) passed captioned and attachment-only sends. The first answer was “Dark blue; sample 73.” Both turns persisted exactly once with their attachments; original PNG/text bytes and SHA256 values matched before and after refresh. The replay requires success:true and terminal_status:completed, not merely HTTP 200.
  • Operator receiver evidence exercised the real candidate Von/new_messages/context_for/prepare_attachment_inputs path with an enforced synthetic recipient, canonical references, byte hashes, retry reuse and wrong-recipient/substituted-copy/cross-org consumer rejection. Codex VS Code inspected those staged originals; this DGX coding session also opened the blue PNG and read the text (sample 37, destination harbour), independently verifying their hashes.

Browser product revision: c826064d9d23d9f1dbaec3f0dfe8dc3d913961c6; subsequent changes are browser tests only. Receipts are retained in the controller-owned checkout under .run/attachments-final/, .run/attachments-resumed/, and .run/JVNAUTOSCI-2756-handoff.txt. Receiver evidence is canonically attached to the native execution task, with original concept IDs and hashes preserved in that handoff.

Release boundary and limitations

The database/identities and clipboard/drop events are synthetic; uploads, sends, recipient reads, provider calls and history routes are real candidate implementations. Fixture database connectivity recovered after the supported profile restart. Its synthetic user needed a scoped Luna pool setting; Luna's Chat Completions route required reasoning none. These are acceptance configuration observations, not production configuration changes.

No public deployment or production worker activation is claimed. After merge, the controller must deploy the verified current-main SHA and activate worker/inbox/backend together through the existing safe-boundary release route, with module/revision read-back and rollback. Web deployment alone does not activate the worker changes. No credentials, migrations, production memberships or infrastructure were changed.

Opaque formats retain downloadable originals plus interpretation limitations. Broad format interpretation, all physical devices and unrelated UI/migration improvements are outside this change.

@witbrock
witbrock merged commit 632af96 into main Sep 13, 2026
2 checks passed
@witbrock
witbrock deleted the codex/von-5d98ca3076e14d25 branch September 13, 2026 20:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant