992d2b83b3
threadSummary.ts (pure helpers) and ThreadSummary.tsx (chip component) lived in the same directory differing only by case. On the case-insensitive Windows release runner, RoomTimeline's extensionless import of ./thread/ThreadSummary resolved .ts BEFORE .tsx and matched the helper module → rolldown MISSING_EXPORT "ThreadSummary" — invisible on every Linux/macOS build (and the cause of the earlier masked pdf.worker failure). Helper module renamed to threadSummaryData.ts (+ test), 3 importers updated. Prevention: new caseCollision.test.ts walks src/ and fails on any same-directory names differing only by case (extensionless compare, so Foo.tsx vs foo.ts is caught) — verified it fails on the pre-rename tree. Runs in the hard CI gate. Gates: tsc clean, eslint/prettier clean, build OK, 658/659 tests (1 IDB skip). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>