# Upgrade Guide — v0.26.1

<!-- bump: patch -->

## What Changed

**Slack standalone file support** — Previously, files drag-and-dropped into Slack without accompanying text were silently ignored. These arrive as `file_shared` events containing only a `file_id` (no download URL), so the handler logged them but never processed them. Now `_handleFileShared()` calls the Slack `files.info` API to fetch the full file metadata (`url_private`, mimetype, name), downloads with authenticated `FileHandler`, and routes through the standard message pipeline.

**Scope dependency**: This feature uses `files.info` which requires the `files:read` bot scope. This scope was always listed as required but was never exercised at runtime until now. Slack apps created using the instar setup flow should already have it. If the scope is missing, the handler logs an actionable error message ("add files:read in your Slack app's OAuth settings") and fails gracefully — existing functionality is not affected.

**Graceful degradation**: If `files.info` fails for any reason (missing scope, rate limit, network error), the file is simply not processed. No crash, no broken messages. Message-embedded files (sent with text) continue to work exactly as before via the existing inline handler.

## What to Tell Your User

- **Slack file support**: "Files shared in Slack without a message — like drag-and-dropping a PDF or image — are now picked up and processed automatically. Previously these were silently ignored. If your Slack app was set up with the standard permissions, this just works. If not, I can help you add the required permission."

## Summary of New Capabilities

| Capability | How to Use |
|-----------|-----------|
| Standalone Slack file processing | Automatic — drag-and-drop files into Slack channels |
| Missing scope detection | Automatic — actionable error logged if `files:read` scope is missing |
