## Phase 1 Complete: Contracto de ArchiveReader (list + stream) TL;DR: Añadida `streamArchiveEntry` a `archiveReader` y tests unitarios que cubren streaming con `7z`, fallback `unzip -p` y formato no soportado. Los tests unitarios específicos pasan y la implementación es mockeable. **Files created/changed:** - backend/src/services/archiveReader.ts - backend/tests/services/archiveReader.stream.spec.ts - backend/tests/services/archiveReader.spec.ts **Functions created/changed:** - `streamArchiveEntry(containerPath, entryPath)` — nueva función que retorna un `Readable` con el contenido de una entrada interna (o `null` para formatos no soportados). - `listArchiveEntries(filePath)` — sin cambios funcionales (pruebas de listado existentes siguen pasando). **Tests created/changed:** - `backend/tests/services/archiveReader.stream.spec.ts` — tests unitarios para `streamArchiveEntry` (7z success, unzip fallback, unsupported formats). - `backend/tests/services/archiveReader.spec.ts` — tests de listado existentes (sin cambios funcionales relevantes). **Review Status:** APPROVED with minor recommendations **Git Commit Message:** feat: add streamArchiveEntry to archiveReader and tests - Añade `streamArchiveEntry` que devuelve un stream para entradas internas de ZIP/7z - Añade tests unitarios que mockean `child_process.spawn` (7z + unzip fallback) - Mantiene `listArchiveEntries` y documenta dependencia de binarios en CI