Test report · September 20, 2026

Pass. 100 files sent through the UI and acknowledged by Codex.

PR #12620 · Tested 25ec8e819e against main / 8dd02470b1.
Exact PR checkout, no code edits. Isolated server with a consistent copy of existing data.

Using Chromium on a separate virtual display, I attached 9 files, then 100 through the native picker. The 101st was rejected without losing the existing files. Removing one freed a slot for its replacement. All 100 survived reload and sent successfully; the persisted user message contains 100 attachments and Codex GPT-6-Astra replied UI_ATTACHMENT_TEST_OK.

Live checkObserved result
9 and 100 inline images; 100 signed file uploadsPass. HTTP 200, matching attachment counts in thread snapshots and stored files.
101 inline images or uploaded filesPass. HTTP 400, zero newly claimed files.
80 MiB image boundaryPass. Exactly 80 MiB accepted. One byte over rejected, including understated client sizes, with no new files left behind.
Images labeled as files; video exclusionPass. 90 MiB of generic-file images rejected. 80 MiB of those images plus a 50 MiB video accepted.
Individual size limitsPass. Image payload of 10 MiB + 1 byte rejected. Video upload of 50 MiB + 1 byte rejected.

Focused tests cover upload rollback, question-answer attachments, web drafts, mobile pickers and sharing, and all six provider adapters. Contracts typecheck, changed-code lint, and formatting passed. GitHub's Check and test jobs were green at the same commit.

Coverage limits
The authenticated provider check used 100 small text files and verified acknowledgement, not inspection of every file. High-volume native image input, the other five providers, Electron, native mobile, queued sends, question-answer UI, and remote/relay/tunnel behavior remain unverified. Their relevant automated suites passed. Large image API payloads tested byte handling, not model image decoding.

No reproduced attachment defect. Validate provider-specific image capacity separately before promising 100 images.

100 attachments retained and the 101st rejected
The 101st file is rejected; all 100 existing attachments remain.
Sent attachment message and Codex acknowledgement
The 100-file message sent successfully and received the requested response.