c132783ea0
Covers cluster C1-images (#69185, #32315, #66136): - _slack_file_marker unit tests: typed markers per mimetype family, hostile-filename sanitization (newlines/brackets can't fake context structure). - _render_message_text appends markers; a caption-less image post no longer vanishes from thread context. - Cold-start hydrate integration: prior-message images surface as markers in channel_context; the thread root's image is downloaded, delivered as media_urls, and upgrades message_type to PHOTO. - Failure path: root-image download failure degrades to the marker, never blocks the turn. - Bounds: root delivery capped at _THREAD_ROOT_IMAGE_MAX; non-image root attachments stay marker-only (no download). - One-time delivery: active thread session skips the hydrate → no re-download/re-delivery on later turns. - Composition: the trigger's own event files still ride alongside a delivered root image; Slack Connect stubs resolve via files.info; the collector never issues its own conversations.replies call. - Delta refresh (#23918 path): images in new replies past the watermark surface as markers, with no root re-download. A/B: 14 of 15 tests fail with the adapter fix reverted, all pass with it applied.