# Pre-12 Batch 09: compression header responsibility Date: 2026-08-13 ## Scope - Removed the direct `internal.h` include from `decompressor.c` and the four `decompressor_*.c` backend consumers that already include `compress.h`. - Made no declaration, definition, function, storage-duration, or public API changes. ## Candidate source Batch 04 created `compress.h` with a direct `internal.h` include and added `compress.h` to these five translation units while retaining their direct `internal.h` includes. Batch 06 then made LZMA, DEFLATE, and ZSTD backend functions private and exposed only their descriptor objects through `compress.h`. This left exactly five duplicate include edges attributable to Batches 04/06. ## Static proof - `compress.h` remains the sole owner of `z_erofs_decompress_req`, `z_erofs_decompressor`, the LZ4 decompressor prototype, and the three backend descriptor declarations. - `internal.h` remains the sole public owner of `z_erofs_decompress` and `z_erofs_parse_cfgs`; it does not include `compress.h`. - The include graph remains acyclic: each affected translation unit includes `compress.h`, and `compress.h` includes `internal.h`, which includes only `erofs_fs.h` among project headers. - Each affected consumer therefore still sees the same complete request, descriptor, mount, map, and superblock types through one guarded include path. No backend prototype or descriptor declaration is duplicated between `internal.h` and `compress.h`. - The source diff removes exactly one `#include "internal.h"` line from each of five authorized files and changes no other token. - `git diff --check` and `git diff --cached --check` were required for this batch. ## Deferred validation No build, QEMU, smoke, feature, or other dynamic validation was run under the execution constraint. The required FreeBSD KLD `WITH_ZSTDIO=0/1` matrix and final Plain/LZ4/LZMA validation remain deferred.