-
Status do intake: implemented-pending-homologation
-
Data: 2026-08-31
-
Origem: relato do Engenheiro Chefe durante execução do release
2.10.0no Windows/OneDrive -
Classificação: esteira operacional, release tooling, Windows I/O
-
Batch: BATCH-151
1. O sintoma
Ao executar ./c2f manager:release 'minor' 'gestor-v2.10.0' 'chore(release): publish manager 2.10.0' 'automatic' no Windows, após a compilação e persistência dos dados (atualizacao-dados-recursos.php), a criação do commit falhava com código de saída 128:
Creating commit and tag for version gestor-v2.10.0...
✖ ERROR fatal: Unable to create '[REDACTED] File exists.
Another git process seems to be running in this repository, or the lock file may be stale2. A causa
No script canônico ai-workspace/en/scripts/releases/release.sh, a etapa 2 realizava o staging explícito arquivo a arquivo através de um loop while:
while IFS= read -r -d '' release_file; do
git add -- "$release_file"
done < <({ git diff --name-only -z; git ls-files --others --exclude-standard -z; })No ambiente Windows, especificamente em árvores sincronizadas pelo OneDrive e monitoradas por extensões de Git do VS Code, disparar dezenas de processos git add individuais em sucessão imediata (milissegundos) gera colisão de arquivo de lock (.git/index.lock). O processo subsequente tenta criar o lock antes do descritor de arquivo anterior ser completamente liberado pelo kernel do Windows e pelo sincronizador.
3. A correção
Substituição do loop serial de múltiplos git add por batching via xargs -0 -r git add --:
# Stage each path explicitly; batch with xargs -0 to avoid index.lock collisions on Windows/OneDrive.
{ git diff --name-only -z; git ls-files --others --exclude-standard -z; } | xargs -0 -r git add --Benefícios:
-
Atômico: Dispara o Git uma única vez com a lista de caminhos específicos a incluir (respeitando integralmente a proibição de
git add -Aegit add .da governança SDD). -
Zero concorrência de lock: O lock
.git/index.locké criado e destruído uma única vez para todo o lote gerado pelo preflight. -
Resiliente: Compatível nativamente com Git Bash no Windows, macOS e Linux CI.