name: out-of-memory-build-nsjfinancas
description: Orquestra o tratamento de "out of memory" no build do nsjFinancas (erro F2046 do dcc32), do diagnostico ao alivio: limpeza de uses/units redundantes, separacao de modulo em package e re-build validado por log. Use quando o build, nsbuild nsjfinancas ou dcc32 falhar por estouro de memoria, quando o projeto estiver pesado demais para compilar, ou quando aparecer F2046/Out of memory/Out of resources; nao use para F2613 (unit nao encontrada) nem para falta real de RAM do SO sem relacao com o compilador.
Out Of Memory no Build do nsjFinancas
Executar este fluxo quando o build do nsjFinancas falhar por estouro de memoria do compilador (F2046), tipicamente porque o projeto cresceu demais e o dcc32 (Win32) atinge o limite de memoria do processo.
Esta skill roteia e sequencia outras skills; nao duplica a tecnica de cada etapa. A correcao real fica nas skills especializadas referenciadas abaixo.
Pre-requisito de diagnostico
Antes de agir, confirmar que o sintoma e mesmo F2046 do compilador:
F2046 Out of memory(ouOut of resources) no log de build / IDE -> e este fluxo.F2613 Unit '<...>' not found-> NAO e este fluxo; usar diagnostico-f2613-package.- Falha de RAM do SO fora do
dcc32(maquina sem memoria, outro processo) -> tratar ambiente, fora do escopo desta skill. - Tratar
F2046como limite de memoria dodcc32, nao apenas falta de RAM da maquina.
Ordem de combinacao de skills
- delphi-legado-guardrails (stack)
- nsjfinancas-refactor-guardrails (arquitetura/refactor)
- esta skill (roteamento por sintoma)
- skill de execucao da etapa atual (limpeza, package ou build)
Fluxo
- Diagnostico — confirmar
F2046pelo log (build\logs\nsjfinancas.log) ou pela unit alvo apontada na IDE. Registrar a unit onde o compilador estourou, quando houver. - Alivio rapido (baixo risco, primeiro) — reduzir a carga do compilador sem mover codigo:
- Aplicar a mitigacao de
F2046de nsjfinancas-refactor-guardrails: limparusesde units de alto fan-out (browser base, controller base, dao base) e mover o que nao for exigido por assinatura publica/heranca/tipo de campo deinterface usesparaimplementation uses. - Auditar e remover units candidatas a redundantes com verificar-units-redundantes, cruzando
nsjFinancas.dpr,nsjFinancas.dprojebuild/xmls/nsjfinancas.nsproj.xml. - Re-build a cada lote pequeno (ver etapa 4). Se isso ja resolver, parar aqui.
- Aplicar a mitigacao de
- Alivio estrutural (quando a limpeza nao basta) — tirar peso do projeto principal movendo modulo para package:
- Definir a fronteira do modulo funcional completo com registrar-limpeza-modulos.
- Executar a migracao uma unit por vez, com build e rollback por etapa, usando migrar-units-package-incremental.
- Se o modulo alvo for bordero, preferir migrar-bordero-package.
- Validar sempre o trio
nsproj.xml+nsjFinancas.dpr+nsjFinancas.dproj(dependencia registrada, units legadas removidas dodpr,DCCReferenceremovidos dodproj).
- Build validado — com build-erp-workspace:
- Quando houver package em jogo, rodar build isolado do package antes do build amplo do
nsjFinancas. - Alvo padrao do repo
erp-financas-servicos:nsbuild nsjfinancas. - Nao usar
cleanpor padrao; so com pedido explicito do usuario no mesmo turno. - Confirmar resultado sempre pelo log do alvo (
build\logs\nsjfinancas.log), nao so pelo retorno do script.
- Quando houver package em jogo, rodar build isolado do package antes do build amplo do
Regras de decisao
- Ir do alivio mais barato e reversivel (limpar
uses) para o mais estrutural (package), nunca o inverso. - Aplicar alteracoes em lote pequeno e rodar build completo a cada lote viavel; um lote grande esconde qual mudanca reduziu (ou nao) a memoria.
- Se a remocao de uma unit fizer surgir
F2613, sair para diagnostico-f2613-package e so depois retomar este fluxo. - Nao remover unit apenas porque pertence a dependencia no
nsproj; tratar como candidata ate o build validar. DCC_UnitSearchPathmuito longo tambem estoura limite dodcc; preferir package/dependencia a dezenas de caminhos.- Se a separacao de modulo gerar metodo inacessivel ou puxar cadeia pesada, reduzir o corte para o menor conjunto compilavel (geralmente
Constantes + DTO) em vez de mover o modulo inteiro. - Em mudancas Delphi, herdar as restricoes de stack (
Windows-1252, GUID viaTManipuladorGUID, sem consulta direta em Form).
Saida minima esperada
- Confirmacao de que o erro e
F2046(com a unit alvo, quando houver). - O que foi feito em cada etapa aplicada (limpeza de
uses, units removidas, modulo movido para package). - Resultado do build, validado pelo log do alvo.
- Se ainda houver
F2046, qual a proxima etapa recomendada (ex.: extrair o proximo modulo candidato).