Host Disk Recovery (low-disk) — pragmático e seguro
Guia curto para recuperar espaço sem perder continuidade do trabalho.
Objetivo
- Recuperar espaço livre rapidamente.
- Evitar apagar evidência canônica por acidente.
- Voltar ao fluxo de long-run/fábrica com controle.
Princípios
- Dry-run primeiro.
- Sessões (
.sandbox/pi-agent/sessions) são protegidas por padrão. - Só habilitar remoção de sessões quando necessário e mantendo recentes.
- Aplicar limpeza em lotes pequenos com cap de remoção.
- Evitar scan pesado por default (ex.:
duamplo sem limite) — prefira checks bounded primeiro.
Comandos
No agents-lab, use os wrappers:
# 1) Diagnóstico (sem apagar nada)
pnpm run ops:disk:check
# 2) Limpeza segura (artefatos temporários / relatórios antigos)
pnpm run ops:disk:cleanup
# 3) Modo agressivo (somente se ainda faltar espaço)
# remove sessões antigas mantendo as 20 mais recentes
pnpm run ops:disk:cleanup:with-sessions
Em outros projetos, use a mesma política: diagnóstico read-only primeiro, limpeza de caches/artefatos gerados em lotes pequenos e remoção de sessões somente com opt-in explícito.
Script usado
scripts/host-disk-guard.mjs
O que ele limpa por padrão (--apply)
- artefatos temporários
oh-pi-bg-*.log|pidem diretórios de temp .pi/reportsantigos (threshold configurável)
O que ele não limpa por padrão
*.jsonlem.sandbox/pi-agent/sessions- para isso, é obrigatório
--include-sessions - artefatos de volume do host, como Docker/WSL
*.vhdx
Quando hostVolumes domina
Se a saída mostrar hostVolumes muito maior que os candidatos de limpeza, o problema não está nos artefatos seguros do repositório. Exemplo:
volatile: ... globalSessions=622.75MB hostVolumes=214306MB
top host volume artifacts (read-only inventory):
- docker-wsl-data-vhdx: C:/Users/.../Docker/wsl/disk/docker_data.vhdx
- wsl-ubuntu-vhdx: C:/Users/.../Packages/CanonicalGroupLimited.Ubuntu.../LocalState/ext4.vhdx
Nessa situação:
- Tratar
ops:disk:cleanupcomo insuficiente para desbloquear long-run. - Manter o Pi em modo curto/checkpoint até liberar disco fora do repo.
- Resolver Docker/WSL pelo mecanismo próprio do host, com intenção explícita do operador.
- Reexecutar
pnpm run ops:disk:cleanup:dryepnpm run pi:dev:pressureantes de voltar à runtime do Pi.
O inventário de hostVolumes é somente leitura. Ele não autoriza apagar, compactar ou resetar Docker/WSL automaticamente.
Checklist de retomada
- Executar
ops:disk:check. - Aplicar limpeza segura de caches/artefatos gerados.
- Confirmar margem de espaço livre aceitável.
- Rodar validação focal pendente (smokes curtos).
- Atualizar
.project/handoff.jsoncom evidência da retomada.
Ordem curta de triagem de capacidade
Antes de abrir pesquisa ou escalar compute, seguir esta ordem:
- limpar leve/diagnosticar (
ops:disk:check,git_maintenance_status,machine_maintenance_status); - pesquisar apenas se houver bloqueio técnico real sem resposta local;
- escalar só com task local-safe elegível (senão vira custo sem throughput).
Manutenção do repositório Git
Avisos como There are too many unreachable loose objects; run 'git prune' to remove them indicam que o Git deixou de fazer cleanup automático até o .git/gc.log ser tratado. Isso é um sinal de manutenção, não um blocker imediato.
Como classificar
- Informativo: poucos MiB de loose objects,
garbage=0, testes/commits normais e sem impacto de performance. - Warning: aviso aparece repetidamente,
git count-objects -vHmostra milhares de loose objects, ou.git/gc.logimpede novo auto-gc. - Intervenção: disco baixo, clone/commit/status ficam lentos, muitos objetos ocupam centenas de MiB/GiB, ou há suspeita de worktrees/runs gerando objetos órfãos em excesso.
Diagnóstico dry-first
Em runtime do pi, prefira git_maintenance_status: a tool executa apenas diagnóstico (git count-objects -vH + presença de .git/gc.log), classifica o sinal e retorna cleanupCommandsExecuted=[].
# Sem apagar nada
git count-objects -vH
# Ler a causa do último gc que bloqueou auto-cleanup
# Windows/cmd:
if exist .git\\gc.log type .git\\gc.log
Um resultado severity=warning action=monitor significa registrar e continuar se o repositório estiver responsivo; não autoriza git gc, git prune nem remoção de .git/gc.log.
Política de ação
- Não executar
git pruneautomaticamente em unattended. - Não remover
.git/gc.logautomaticamente só para reativar auto-gc. - Se estiver em Warning, registrar no handoff e seguir trabalhando se o tamanho for pequeno.
- Se entrar em Intervenção, pedir intenção explícita do operador e preferir sequência dry-first:
- checkpoint/handoff;
git count-objects -vH;- revisar
.git/gc.log; - confirmar que não há worktree/rebase/merge crítico em andamento;
- só então considerar
git gc/git pruneconforme decisão do operador.
Prevenção de recorrência
- Evitar comandos pesados em background sob baixa margem de disco.
- Preferir slices com 2–4 arquivos e testes focais.
- Registrar checkpoint antes de validações potencialmente longas.
- Rodar
ops:disk:checkperiodicamente em fases de long-run. - Tratar avisos de Git GC como manutenção controlada: observar, classificar e agir dry-first.
- Se
hostVolumesaparecer como o maior consumo, pausar long-run e corrigir o host antes de tentar otimizar o repositório.