Environment for every capture: Chromium, 1280 × 800, light theme; isolated fresh server state, synthetic local Blob attachments, real indexing worker.

In a fresh real web app, create a synthetic project, attach one.csv and one.tsv (name\nAda\n), two.csv (name,age header plus Ada/36 and Grace/85), one.txt (1,048,576 a characters plus newline), and two.txt (two 512 KiB lines). Open each attachment from its composer chip, wait for the indexed size suffix, capture its status, and close it. Repeat unchanged on head.

### Scenario: Attachment previews use singular and plural count labels

**Proven: the scenario fails on base [b68aedfdb7](https://github.com/pingdotgg/t3code/commit/b68aedfdb71534bfdfbe55771ef2e686742faa8e) and passes on head [03d11458ca](https://github.com/pingdotgg/t3code/commit/03d11458ca11e4947628f6628ce4def0a0200db9).**

|  | Base [b68aedfdb7](https://github.com/pingdotgg/t3code/commit/b68aedfdb71534bfdfbe55771ef2e686742faa8e) | Head [03d11458ca](https://github.com/pingdotgg/t3code/commit/03d11458ca11e4947628f6628ce4def0a0200db9) |
| --- | --- | --- |
| Result | ❌ failed<br>ASSERTION_FAILED: expected ["1 rows · 1 columns · 1 KB","1 rows · 1 columns · 1 KB","2 rows · 2 columns · 1 KB","1 lines · 1.0 MB","2 lines · 1.0 MB"] to equal ["1 row · 1 column · 1 KB","1 row · 1 column · 1 KB","2 rows · 2 columns · 1 KB","1 line · 1.0 MB","2 lines · 1.0 MB"] | ✅ passed |
| one csv | ![Base b68aedfdb7: one csv](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3888786a9024569a/001-one-csv.png) | ![Head 03d11458ca: one csv](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dae1ae9b95c119a8/001-one-csv.png) |
| one tsv | ![Base b68aedfdb7: one tsv](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/92dcc8e5b798bc9d/002-one-tsv.png) | ![Head 03d11458ca: one tsv](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/87aabfcae86f82b4/002-one-tsv.png) |
| two csv | ![Base b68aedfdb7: two csv](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c05168eda1b22bb5/003-two-csv.png) | ![Head 03d11458ca: two csv](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/23226c5d19fd7008/003-two-csv.png) |
| one txt | ![Base b68aedfdb7: one txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6568b03b71514143/004-one-txt.png) | ![Head 03d11458ca: one txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a3c5dbe410371c3b/004-one-txt.png) |
| two txt | ![Base b68aedfdb7: two txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eae7a29efa434823/005-two-txt.png) | ![Head 03d11458ca: two txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/889573e6266c0cb8/005-two-txt.png) |
| failure | ![Base b68aedfdb7: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/67a626380349eee3/006-failure.png) |  |

[Scenario driver](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b9776772756dbcfb/attachment-count-labels.e2e.ts)
