Conn2Flow
Navegação das docs

SDD

req-149: Colisão de index.lock no Windows durante staging de release do Gestor

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…

  • Status do intake: implemented-pending-homologation

  • Data: 2026-08-31

  • Origem: relato do Engenheiro Chefe durante execução do release 2.10.0 no 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 stale

2. 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:

  1. 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 -A e git add . da governança SDD).

  2. Zero concorrência de lock: O lock .git/index.lock é criado e destruído uma única vez para todo o lote gerado pelo preflight.

  3. Resiliente: Compatível nativamente com Git Bash no Windows, macOS e Linux CI.

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