GClaude Indexer

O indexador de documentos offline agora instala sem terminal — e o bug que me custou três rodadas

Quando publiquei aqui, instalar o GClaude Indexer significava abrir o

PowerShell e rodar um script. Recebi a mesma resposta de várias pessoas:

"parece útil, mas não consigo instalar". O projeto serve pra quem tem

acervo de documento pra organizar, que quase nunca é quem tem intimidade

com terminal.

A 1.3.0 resolve isso. É um instalador gráfico do Windows que baixa e

instala as cinco dependências sozinho, com barra de progresso, e uma tela

onde você marca o que quer: Tesseract e Ghostscript travados (sem OCR o

programa não faz o que existe pra fazer) e Ollama, modelo de 3,2 GB,

bibliotecas de sensor e atalho opcional à sua escolha.

O que eu queria registrar, porque me custou três rodadas de correção, é

como um instalador consegue mentir que instalou.

O comando era montado assim:

cmd /c ""powershell.exe" -File ""C:\Program Files\GClaude Indexer\install.ps1"" ..."

As aspas dobradas são exigência do cmd, que come um nível delas. Só que o

PowerShell não recebe o resultado limpo: ele via -File 'C:\Program',

recusava o arquivo por não ter extensão .ps1, e — isso é o detalhe cruel —

caía no modo interativo, imprimindo o banner de copyright. A pessoa via uma

janela preta aberta e supunha que era o instalador pedindo alguma coisa.

Só funcionava em caminho sem espaço. A pasta padrão do Windows tem espaço.

O que escondeu isso por três versões foi o sinal de conclusão:

& echo %ERRORLEVEL% > done.txt

O & do cmd roda o segundo comando independentemente do primeiro. Então o

arquivo aparecia, o instalador lia um número, e seguia para a tela de

sucesso — sobre uma instalação em que nenhuma dependência tinha sido

instalada. Três pessoas diferentes me disseram "instalou, mas falta tudo",

e eu procurei o problema nos downloads.

A correção foi tirar o cmd.exe do caminho: o instalador escreve um .ps1 em

%TEMP% com os caminhos já embutidos como literais do PowerShell e executa

aquele arquivo. Um arquivo não tem aspas pra errar no meio do caminho. E o

sinal de conclusão passou a ser escrito pelo próprio script, depois de ter

rodado — que é a versão honesta do que o echo fingia ser.

Lição que eu levo: um valor de retorno que é produzido mesmo quando o

trabalho não aconteceu não é um valor de retorno, é um enfeite. Vale pra

exit code, pra sentinela em arquivo e pro código de saída do winget, que

também me enganou nessa mesma fase — ele relata sucesso para uma

desinstalação que deixou o pacote no lugar.

GPL-3.0, offline, sem telemetria, 600 testes:

https://github.com/alexccastilho/gclaude-indexer

Source

3 views·1 share