Format reader foundation ======================== PipeWhy keeps source access, format decoding and snapshot publication separate. The local source boundary verifies an exact file digest and closes its handle; the reader interprets explicitly configured schema and limits; the capture coordinator publishes only after all batches have been consumed and verified. Read failures cannot turn provisional records into a complete snapshot. Each format must define how it represents fields, scalar types, null and missing values, record order, limits, malformed input and source identity. Its schema and normalization profile are part of the fingerprint context. Strict typed representation is the default; logical normalization is an explicit option. Neither profile claims to preserve every detail of a file's syntax. Selection is explicit. File extensions do not establish format, source version or provenance. The initial implementation supports the local CSV subset described in :doc:`format-sources`; other formats, compression and remote storage require their own implementations and qualification. A file does not itself establish upstream lineage, so captures without supporting evidence report it as unknown. Changes to readers require independent expected-value tests, error and limit tests, offline capture checks, the project quality gates, and package installation checks. The raw reader contract is available in the repository blueprint.