Conn2Flow
Navegação das docs

SDD

req-164: Blindagem contra MSYS Path Conversion em Chamadas rsync do Transporte [REDACTED] Windows (BATCH-169)

Durante a execução do pipeline de atualização de ambiente (c2f manager:update-all ou c2f project:update-all), a sincronização de arquivos para a VM de desenvolvimento ([REDACTED]…

1. Descrição do Problema & Contexto

Durante a execução do pipeline de atualização de ambiente (c2f manager:update-all ou c2f project:update-all), a sincronização de arquivos para a VM de desenvolvimento ([REDACTED] via SSH) falha com o seguinte erro retornado pelo rsync:

The source and destination cannot both be remote.
rsync error: syntax or usage error (code 1) at main.c(1446) [Receiver=3.2.7]

Causa Raiz Mapeada

  1. No Windows, quando scripts Bash são executados via Git Bash / MSYS2, os caminhos locais de diretório (ex: CORE_SOURCE ou ORIGEM) são resolvidos pelo pwd no formato POSIX (ex: /c/Users/otavi/.../gestor/).

  2. Quando o Git Bash executa um binário externo como rsync, o MSYS2 realiza automaticamente a conversão de caminhos POSIX para caminhos de formato Windows com letra de unidade ([REDACTED]).

  3. O binário rsync possui sintaxe nativa onde qualquer argumento contendo dois-pontos : (que não comece com /) é interpretado como uma especificação de [REDACTED] ([USER@][REDACTED]).

  4. Como o destino [REDACTED]ém contém : ([REDACTED]:[REDACTED]), o rsync conclui que ambos os argumentos são remotos, emitindo o erro The source and destination cannot both be remote.

  5. Esse comportamento já está catalogado na skill c2f-shell-and-windows-traps (Armadilha 1) para chamadas docker exec, mas ainda não estava protegido nas chamadas de rsync do transporte de projetos.


2. Escopo Técnico de Alterações

Módulo 1: Biblioteca de Transporte (ai-workspace/en/scripts/lib/project-transport.sh)

  • Criar a função helper project_transport_run_rsync() (ou expor MSYS_NO_PATHCONV=1 antes das invocações de rsync), garantindo que comandos rsync executem no ambiente Windows sem que o MSYS2 reescreva os caminhos POSIX locais com a letra de unidade C:.

Módulo 2: Scripts de Sincronização

  • Em ai-workspace/en/scripts/projects/sync-core-to-project.sh:

    • Envolver as invocações "${CMD[@]}", "${RUNTIME_CONTRACT_CMD[@]}" e "${CLI_SYNC_CMD[@]}" com MSYS_NO_PATHCONV=1 (ou utilizar o helper da biblioteca).

  • Em ai-workspace/en/scripts/projects/synchronize-project.sh:

    • Na função run_project_rsync(), prefixar a chamada do array "${command[@]}" com MSYS_NO_PATHCONV=1.

Módulo 3: Governança & Documentação

  • Em .codex/skills/c2f-shell-and-windows-traps/SKILL.md (e nos 4 espelhos .claude, .cursor, .gemini, .github):

    • Documentar explicitamente a armadilha do rsync com letra de unidade em transportes SSH e a exigência de MSYS_NO_PATHCONV=1.

Módulo 4: Testes Automatizados

  • Em tests/Unit/PHP/ProjectSshDeployReq034Test.php (ou teste dedicado de transporte):

    • Adicionar asserção garantindo que as chamadas rsync dos scripts de transporte executem protegidas com MSYS_NO_PATHCONV=1 ou utilizem o helper padronizado.


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

  1. Eliminação do Erro "cannot both be remote":

    • A execução de ./sync-core-to-project.sh --project [REDACTED] (ou c2f project:sync-core [REDACTED]) não falha por sintaxe de caminho no rsync.

    • A origem local /c/Users/... é interpretada pelo rsync como caminho local e o destino como remoto via SSH.

  2. Suíte de Testes e Sintaxe:

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

    • Suíte PHPUnit e Vitest passam 100%.

  3. Evidências Registradas:

    • Registrar relatório em sdd/implementation/BATCH-169.md e atualizar sdd/implementation/BATCH-INDEX.md e sdd/human-requests/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