Conn2Flow
Navegação das docs

SDD

req-166: Resiliência do Transporte SSH/rsync no Windows contra Falha de Descritores dup() no MSYS2 (BATCH-171)

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…

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

  1. O pipeline PHP (c2f project:update-all) dispara scripts shell através de proc_open (BaseProcessCommand::runShell), que estabelece pipes anônimos do Win32 para stdin, stdout e stderr.

  2. O script Bash resultante (sync-core-to-project.sh) invoca o binário rsync.exe (MSYS2/Git Bash 3.4.1), que precisa gerar um subprocesso ssh via flag -e.

  3. 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 com dup() in/out/err failed devido à ausência de PTY ou inconsistência nos handles herdados da cadeia PHP (proc_open) -> bash -> rsync -> ssh.

  4. É necessário blindar a execução do rsync no Windows/MSYS2 dentro da biblioteca de transporte (project-transport.sh), garantindo descritores válidos, suporte a --blocking-io ou 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 transporte PT_RSYNC_OPTS para garantir compatibilidade com o rsync 3.4.x no Windows:

    • Avaliar o uso de --blocking-io ou isolamento de descritores de I/O durante chamadas não-interativas.

    • Testar e validar a passagem explícita de -e e 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.sh e ai-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 failed em 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 rsync montem os argumentos compatíveis com a mitigação de dup() e pipes Windows.


3. Critérios de Validação e Aceite

  1. 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.

  2. Suíte de Testes 100% Verde:

    • bash -n sem erros em todos os scripts shell.

    • PHPUnit 100% passando.

  3. Evidências Registradas:

    • Registrar evidências em sdd/implementation/BATCH-171.md, BATCH-INDEX.md e CURRENT.md.

O Futuro é Híbrido: Humano + IA.

O Conn2Flow é a ferramenta. Se você precisa do Arquiteto para desenhar a estratégia da sua empresa usando essa tecnologia...

Contrate Consultoria Especializada