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
-
No Windows, quando scripts Bash são executados via Git Bash / MSYS2, os caminhos locais de diretório (ex:
CORE_SOURCEouORIGEM) são resolvidos pelopwdno formato POSIX (ex:/c/Users/otavi/.../gestor/). -
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]). -
O binário
rsyncpossui sintaxe nativa onde qualquer argumento contendo dois-pontos:(que não comece com/) é interpretado como uma especificação de [REDACTED] ([USER@][REDACTED]). -
Como o destino [REDACTED]ém contém
:([REDACTED]:[REDACTED]), orsyncconclui que ambos os argumentos são remotos, emitindo o erroThe source and destination cannot both be remote. -
Esse comportamento já está catalogado na skill
c2f-shell-and-windows-traps(Armadilha 1) para chamadasdocker exec, mas ainda não estava protegido nas chamadas dersyncdo 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 exporMSYS_NO_PATHCONV=1antes das invocações dersync), garantindo que comandosrsyncexecutem no ambiente Windows sem que o MSYS2 reescreva os caminhos POSIX locais com a letra de unidadeC:.
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[@]}"comMSYS_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[@]}"comMSYS_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
rsynccom letra de unidade em transportes SSH e a exigência deMSYS_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
rsyncdos scripts de transporte executem protegidas comMSYS_NO_PATHCONV=1ou utilizem o helper padronizado.
-
3. Critérios de Validação e Aceite
-
Eliminação do Erro "cannot both be remote":
-
A execução de
./sync-core-to-project.sh --project [REDACTED](ouc2f project:sync-core [REDACTED]) não falha por sintaxe de caminho norsync. -
A origem local
/c/Users/...é interpretada pelorsynccomo caminho local e o destino como remoto via SSH.
-
-
Suíte de Testes e Sintaxe:
-
bash -nsem erros em todos os scripts shell alterados. -
Suíte PHPUnit e Vitest passam 100%.
-
-
Evidências Registradas:
-
Registrar relatório em
sdd/implementation/BATCH-169.mde atualizarsdd/implementation/BATCH-INDEX.mdesdd/human-requests/CURRENT.md.
-