1. Descrição do Problema & Contexto
Durante a execução do pipeline ./c2f project:update-all [REDACTED]-local --confirmar-remoto no Windows, o estágio 1/8 (Sincronização Core -> Projeto) falha com o seguinte erro retornado pelo rsync:
[2026-09-17 15:41:05] Running: rsync -avu -e [REDACTED]=yes -o ConnectTimeout=15 -p 22 --rsync-path sudo rsync --exclude .git/ --exclude /logs/ --exclude /temp/ --exclude resources.map.php /c/Users/otavi/OneDrive/Documentos/GIT/conn2flow/gestor/ [REDACTED]:[REDACTED]
✖ ERROR dup() in/out/err failed
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(232) [sender=3.4.1]Causa Raiz Mapeada
-
O pipeline PHP (
c2f project:update-all) dispara scripts shell através deproc_open(BaseProcessCommand::runShell), que estabelece pipes anônimos do Win32 para stdin, stdout e stderr. -
O script Bash resultante (
sync-core-to-project.sh) invoca o bináriorsync.exe(MSYS2/Git Bash 3.4.1), que precisa gerar um subprocessosshvia flag-e. -
Ao tentar clonar/duplicar os descritores de arquivo padrão para conectar os pipes com o processo
ssh, a camada de compatibilidade POSIX do MSYS2/Cygwin falha comdup() in/out/err faileddevido à ausência de PTY ou inconsistência nos handles herdados da cadeiaPHP (proc_open) -> bash -> rsync -> ssh. -
É necessário blindar a execução do
rsyncno Windows/MSYS2 dentro da biblioteca de transporte (project-transport.sh), garantindo descritores válidos, suporte a--blocking-ioou alternativas de redirecionamento de transporte.
2. Escopo Técnico de Alterações
Módulo 1: Biblioteca de Transporte (ai-workspace/en/scripts/lib/project-transport.sh)
-
Ajustar
project_transport_run_rsync()e as opções de transportePT_RSYNC_OPTSpara garantir compatibilidade com o rsync 3.4.x no Windows:-
Avaliar o uso de
--blocking-ioou isolamento de descritores de I/O durante chamadas não-interativas. -
Testar e validar a passagem explícita de
-ee parâmetros [REDACTED] colisão de pipes.
-
Módulo 2: Scripts de Sincronização de Projetos
-
Em
ai-workspace/en/scripts/projects/sync-core-to-project.sheai-workspace/en/scripts/projects/synchronize-project.sh:-
Assegurar que os descritores de stdin/stdout/stderr sejam preservados ou devidamente redirecionados quando invocados a partir do console PHP CLI.
-
Módulo 3: Governança & Skills
-
Em
.codex/skills/c2f-shell-and-windows-traps/SKILL.md(e nos 4 espelhos.claude,.cursor,.gemini,.github):-
Documentar o mecanismo da falha
dup() in/out/err failedem cadeias aninhadas de pipes Win32/MSYS2 e a solução técnica adotada.
-
Módulo 4: Testes Automatizados
-
Em
tests/Unit/PHP/ProjectSshDeployReq034Test.php:-
Adicionar teste garantindo que as chamadas
rsyncmontem os argumentos compatíveis com a mitigação dedup()e pipes Windows.
-
3. Critérios de Validação e Aceite
-
Eliminação do Erro
dup() in/out/err failed:-
A execução de
./c2f project:update-all [REDACTED]-local --confirmar-remoto(ou./c2f project:sync-core [REDACTED]-local) executa a sincronização [REDACTED]é o fim sem erro de código 12.
-
-
Suíte de Testes 100% Verde:
-
bash -nsem erros em todos os scripts shell. -
PHPUnit 100% passando.
-
-
Evidências Registradas:
-
Registrar evidências em
sdd/implementation/BATCH-171.md,BATCH-INDEX.mdeCURRENT.md.
-