19b41af2e4
The /api router added its own predicate-less CompressionLayer (routes.rs), nested inside the global predicate-aware one in main.rs. As the inner layer it compressed responses first, so the global predicate that skips already- compressed media was bypassed for every /api response: video/audio/image/zip downloads got Brotli-compressed (CPU + first-byte latency for ~0 bytes saved) and lost their Content-Length (forced to chunked -> no client progress bar). - Remove the redundant /api CompressionLayer; /api now flows through the single global layer in main.rs. - Make that predicate smarter: compress by default so nothing shrinkable is missed, and skip ONLY already-compressed types. It no longer blanket-excludes image/*, so image/svg+xml (text, ~70% shrink) now compresses; raster formats are listed individually. Added the previously-missed already-compressed types: Office (docx/xlsx/pptx), ODF, epub, jar, apk, 7z/rar/bzip2/zstd/xz, woff/woff2 fonts, icons. Net: media downloads keep Content-Length and skip pointless compression, while text/JSON/JS/CSS/SVG/XML/ttf/otf/wasm still compress. fmt + clippy clean. https://claude.ai/code/session_01UtfkS3nZF1vrF5jNAps6wV