name: xpz-msbuild-import-export description: Skill para importação e exportação de XPZ via MSBuild, com execução sem interface gráfica, parâmetros explícitos, rastreabilidade e gates (pontos de liberação ou bloqueio) de segurança
xpz-msbuild-import-export
Skill para operações de importação e exportação de XPZ do GeneXus por MSBuild, em execução sem interface gráfica.
Esta skill não substitui o fluxo oficial atual da trilha paralela da KB, não depende de GeneXus Server e não trata sucesso operacional como evidência suficiente de sucesso funcional.
No estado atual, o mecanismo central desta skill já foi validado operacionalmente em múltiplas KBs. O próximo passo desta frente não é mais provar exportação, PreviewMode e importação real como capacidade basal, e sim deixar explícitos:
- o que conta como prontidão operacional estável
- quais limites conhecidos ainda exigem uso controlado
- como classificar exceções sem confundi-las com defeito central do wrapper
Exceções já mapeadas que a skill deve tratar explicitamente:
- conteúdo inconsistente da KB/
XPZ, comoKB_Teste_A - validação funcional incompleta por
GeneXus Serverou licença, comoKB_Teste_E - execução longa em KB grande, como
KB_Teste_Grande_A - warning estrutural por extensão ausente, como
WebPanelDesigner/K2B Object Designer
Critério atual de prontidão operacional desta skill:
- probe (sondagem técnica inicial), abertura headless, exportação,
PreviewModee importação real já validados em KBs de teste controladas - classificação explícita entre sucesso operacional, validação funcional incompleta e problema de conteúdo da KB/
XPZ - logs, artefatos e parâmetros sensíveis rastreáveis
- limites conhecidos já documentados e não tratados como surpresa operacional
Uso mais amplo desta skill ainda depende de:
- critério estável para KBs com dependência externa, licença ou extensão ausente
- interpretação madura de execução longa em KB grande
- confiança suficiente para uso fora de ambiente de experimento controlado
GUIDELINE
Orquestre operações de XPZ via MSBuild com parâmetros explícitos, coleta rastreável de evidências e aborto seguro antes de operações sensíveis. Priorize descoberta de ambiente, PreviewMode, UpdateFile quando suportado pela task carregada, IncludeItems/ExcludeItems para recortes controlados e validação posterior. Nunca trate importação real como padrão.
PATH RESOLUTION
- Este
SKILL.mdfica em uma subpasta de skill sob a raiz do repositório. - Resolva referências
../arquivo.mdrelativas à pasta desta skill, não ao diretório corrente. - Se a skill estiver publicada por symlink, junction ou outro reparse point, resolva primeiro a pasta real da skill e só então interprete referências relativas como
../arquivo.md. - Na prática,
../aponta para a base metodológica compartilhada da raiz.
TRIGGERS
Use esta skill para:
- planejar ou executar validação de ambiente para GeneXus via
MSBuild - abrir a
Knowledge BaseporOpenKnowledgeBase - confirmar versão ativa e
Environmentativo - executar preview de importação com
PreviewMode - gerar
UpdateFile, quando suportado pela task carregada, para análise prévia de impacto - exportar
XPZcom parâmetros explícitos - importar
XPZapenas em fase explicitamente autorizada de teste controlado - classificar resultado em sucesso operacional versus confirmação funcional pendente
- inspecionar propriedades da KB, Version, Environment, Generator, DataStore ou Object
para diagnóstico pré-operação via
Get*Property
Do NOT use esta skill para:
- substituir o fluxo oficial atual da trilha paralela da KB
- cenários que dependam de
GeneXus Servercomo requisito operacional - KB de produção ou homologação compartilhada sem janela clara para experimento
- inferir silenciosamente
KbPath, versão,Environmentou parâmetros sensíveis - afirmar sucesso funcional apenas porque a chamada via
MSBuildterminou sem erro - editar ou ajustar o
Source,RulesouCDATAde um objeto de KB — isso pertence aoxpz-builder
RESPONSIBILITIES
- Usar 10-base-operacional-msbuild-headless como base principal desta frente
- Validar explicitamente
KbPath,GeneXusDir,MsBuildPath,WorkingDirectory,LogPatheGenexus.Tasks.targets - Enriquecer preventivamente o
$env:PATHherdado com subdirs do GeneXus 18 (GeneXus18,gxnet,gxnet\bin,gxnetcore) antes de chamarMSBuild, registrandoobservedContext.pathEnrichment; isso é defesa de ambiente headless, não evidência de falha reproduzida em import/export puro - Tratar
Test-GeneXusMsBuildSetup.ps1como probe (sondagem técnica inicial) não invasivo, anterior a qualquer abertura de KB - Tratar
C:\Program Files (x86)como estritamente somente leitura - Garantir que logs, temporários,
.msbuilde artefatos sejam gerados fora deC:\Program Files (x86) - Permitir auto-criação apenas do
WorkingDirectoryexplicitamente informado, depois de validado como seguro e fora das áreas proibidas - Preferir
Tempcomo destino de artefatos efêmeros de execução e manterscriptscomo pasta de wrappers permanentes - Distinguir claramente:
- sucesso operacional da chamada
- efeito funcional observado depois no GeneXus
- Classificar explicitamente quando a rodada for
ensaio metodológico/experimental, especialmente em casos de serialização, roundtrip controlado, prova de wrapper, prova de envelope, exportação headless,PreviewModeou importação de teste sem validação funcional posterior - Em
ensaio metodológico/experimental, não narrar o resultado como mudança funcional validada; limitar a conclusão ao que a evidência realmente cobriu - Quando a estratégia segura exigir mais de uma fase, tratar cada rodada como incremento controlado e validar build/import antes da fase seguinte
- Sucesso operacional de uma fase não autoriza recompor automaticamente pacote acumulado para a fase seguinte; a próxima rodada deve preferir o delta novo ainda não validado
- Exigir que o probe (sondagem técnica inicial) devolva diagnóstico estruturado com
status,summary,resolvedPaths,checks,blockingReasons,warningsestrategyTrace - Preferir
JSONcomo formato canônico inicial desse diagnóstico - Registrar
stdoutSignals(campos semânticos por domínio),stderrContent,stderrFilteredNoise,exitCode, caminho do.msbuildtemporário e caminho do log - Validar a assinatura efetiva do wrapper e da task antes de assumir formato de parâmetro sensível de exportação ou importação
- Em exportação full da KB, preferir o atalho ergonômico
-FullExportdo wrapper local quando ele existir; manterExportAll='true'apenas como compatibilidade com contratos antigos - Privilegiar
PreviewModee, quando suportado pela task carregada,UpdateFileantes de importação real quando import real ainda não foi autorizado na sessão ou a rodada for exploratória; com import real já autorizado e passos 6b–6c sem bloqueio, seguir Decisão pós-gates no WORKFLOW (preview não obrigatório;Invoke-GeneXusXpzImport.ps1na mesma rodada) - Distinguir explicitamente
operação na KBdeatualização do acervo oficial - Sucesso de preview ou importação não autoriza atualização manual de
ObjetosDaKbEmXml - Quando houver retorno oficial da KB em
XPZ, a atualização deObjetosDaKbEmXmldeve ocorrer depois, pelo fluxo dexpz-sync - Tratar
ImportKBInformation,UpdateFilee defaults internos de importação/exportação como sensíveis e dependentes da assinatura efetiva da taskImport - Tratar
ImportKbInformationcomo tri-state na chamada e no wrapper: omitido oufalsesignificam não emitir o atributo na task (omissão do atributo faz a task aplicar seu próprio default, documentado comotrueem10-base-operacional-msbuild-headless.md); apenastrueemite e exige suporte na instalação atual. Quando o agente passar valor neutro (false) e a task não expuser a propriedade, o wrapper deve omitir o atributo, não bloquear; bloqueio por assinatura só vale para valor não neutro (true). O mesmo princípio se aplica aUpdateFile: omitido equivale a não emitir; valor não vazio em task sem suporte bloqueia. - Não tratar bloqueio por assinatura da task como ajuste silencioso: quando preview ou import bloquear porque a task carregada não expõe propriedade sensível passada pelo agente ou pelo wrapper, é proibido repetir a chamada sem o parâmetro sem antes declarar nominalmente (1) qual propriedade ausente, (2) que o pacote não foi testado ou importado naquela rodada, (3) que a incompatibilidade é divergência de contrato operacional entre chamada/wrapper e assinatura efetiva da instalação, e (4) qual correção será aplicada — omitir parâmetro neutro, corrigir wrapper para omitir automaticamente quando não suportado, ou abortar a frente. Só depois dessa declaração explícita é admissível repetir a chamada com o parâmetro omitido, e nesse caso classificar a rodada como
chamada corrigida por parâmetro sensível omitido. - Normalizar recortes múltiplos de
IncludeItemseExcludeItemscomo lista antes de serializar para a task carregada - Preservar
importedItemscomo lista em qualquer diagnóstico JSON, mesmo quando houver apenas um item - Declarar
importação real efetiva provadaapenas quandoimportedItemscontiver explicitamente o objeto esperado;exitCode=0comimportedItemsausente ou vazio classifica comosucesso operacional sem prova de import efetivo— nunca como import concluído - Quando o
Invoke-GeneXusXpzImport.ps1lançar exceção interna durante o pós-processamento (ex:Exception calling Join, falha de serialização doimport.json, qualquer falha posterior à conclusão da taskImportdo MSBuild) mas o log bruto (msbuild.stdout.logou stdout capturado) contiver__IMPORTED_ITEM__ou marca equivalente para o objeto esperado, classificar comoimportação real efetiva provada por evidência de stdout (falha no pós-processamento do wrapper)— nunca comofalha operacionalnem comosucesso operacional sem prova de import efetivo; a importação real aconteceu de fato, o que falhou foi a montagem do diagnóstico estruturado pelo wrapper; declarar explicitamente queimportedItemsveio do log bruto e que oimport.jsonestá degradado ou ausente; registrar a exceção do wrapper como degradação de diagnóstico separada, não como causa de falha de import - Quando a task carregada não expuser
UpdateFilenemImportKBInformationem valor não neutro solicitado pelo agente, o wrapper de preview deve bloquear esses parâmetros cedo, comstatuspreview bloqueado por assinatura da task; valor neutro (omissão deUpdateFile,ImportKbInformation=false) deve ser tratado como não emissão e não disparar bloqueio - Tratar
Get*Propertycomo operação de leitura segura, sem efeito sobre a KB - Não usar o valor retornado por
GetVersionProperty -Name Namecomo-VersionNameem exportação ou importação; esse valor é o nome descritivo da versão (ex:"Design"), não o identificador aceito porSetActiveVersion(ex:"wsEducacaoSpTeste"); para obter o identificador compatível, usarGetActiveVersion - Não usar o valor retornado por
GetEnvironmentProperty -Name Namecomo-EnvironmentNamepelo mesmo motivo; usarGetActiveEnvironmentpara obter o identificador ativo compatível - Quando
SetActiveVersionouSetActiveEnvironmentfalhar, tratar como bloqueio operacional explícito: a versão ou oEnvironmentsolicitado não existe na KB. O diagnóstico deve orientar omitir-VersionNameou-EnvironmentNamepara usar o contexto ativo, quando esse for o objetivo. - Validar
-Levele-Nameexplicitamente antes de emitir a task; exigir-Targetquando-LevelforGenerator,DataStoreouObject - Nunca inferir o nome da propriedade; sempre exigir
-Nameexplícito - Quando recortes sucessivos isolarem erro residual de
Source,Specificationou referência não resolvida em objeto importado, tratar a continuação como frente de conteúdo da KB/XPZ, não como ajuste adicional presumido do wrapper - Quando o sintoma envolver código de evento GeneXus que parece não executar ou não surtir efeito, distinguir antes de editar o source os dois mecanismos documentados em 02-regras-operacionais-e-runtime.md, seção
Mecanismos de descarte de codigo de evento pelo gerador GeneXus: (a) rejeição na importação versus (b) strip silencioso por eliminação de código morto (DCE). A ação corretiva é diferente em cada caso; não tratar (b) como falha de import nem (a) como bug de runtime/build. - Mecanismo (a): se
exitCode != 0,errorspresentes noimport.jsondeInvoke-GeneXusXpzImport.ps1, ou mensagem no log/stdout comUnknown function '<nome>'/ códigosrc0294(ou similar) apontando linha/coluna do evento, classificar comoimportação real falhou por sourcee registrar explicitamente que o padrão observado é rejeição na importação — função ou construção não exposta à camada de eventos GeneXus; o objeto não foi atualizado na KB. Ler a mensagem para identificar a função rejeitada; a correção é trocar a abordagem no source/XPZ, não reimportar o mesmo pacote nem investigar.csgerado como causa primária. TransactionRules+src0056: se a mensagem forsrc0056: Missed ';' at the end of the ruleemTransactionRules, não tratar como pontuação genérica — ver anti-padrãotransaction-rule-on-event-with-attribute-parameterem 02-regras-operacionais-e-runtime.md e Catálogo 1 em xpz-builder/responsibilities-by-type/transaction.md. Antes de wirear reatividade per-attribute em rule declarativa deTransaction, consultar esse catálogo (escopo motor XPZ; gatilhos corretos GeneXus: skill nexa).- Mecanismo (b): se import OK (
importação real efetiva provadaou equivalente) mas o comportamento esperado do evento não aparece na UI, não classificar como falha de import nem presumir envelope/XML inválido; após build, buscar o handler no.csgerado pelo nome do evento — zero ocorrências ou corpo vazio indica strip por DCE. Handoff paraxpz-msbuild-build(inspeção do.cs) e para a seção canônica em02; a correção típica é tornar o corpo do evento observável ao gerador (ex.: operação opaca via proc externa), não ajustar wrapper de import. - Quando um teste controlado com
Sourceglobal preenchido e outro teste controlado com ajuste isolado dePattern Settingsnão mudarem o padrão principal do log, registrar explicitamente que essas diferenças deixaram de ser suspeitas fortes e estreitar a hipótese para conteúdo da KB/XPZ - Exigir confirmação explícita antes de importação real
- Recomendar reabertura da KB na IDE oficial após testes relevantes para observar warning, marca de versão ou outro efeito colateral
- Perguntas sobre conteúdo nominal de um XPZ — tanto em turnos posteriores da mesma rodada quanto em sessões novas sobre um
.xpzjá existente («por que X está aí?», «tem Y nesse pacote?», «quais atributos exatamente?», «quais Domains?») — exigem fonte autoritativa antes de responder. Caminho A: na mesma rodada, ou quando oexport.jsonda rodada ainda estiver acessível, relerpackage-inventory.jsonviapackageInventory.nominalInventoryAt,packageInventory.packageInventoryPathouartifacts.PackageInventoryPath. Caminho B: em sessão nova, ou quando o sidecar daquela rodada não existir mais (ex.: diretório efêmero emTempjá removido), executarGet-GeneXusImportPackageObjectInventory.ps1 -InputPath <xpz>direto sobre o.xpz.extrasSample,objectsByTypee contagens doexport.jsonsão resumo amostral ou agregado; memória de conversa anterior também é amostral; a fonte autoritativa do conteúdo nominal é o sidecar (caminho A) ou nova execução do motor de inventário (caminho B) - Export legado GeneXus 9 (perfil automático do inventário): se o
.xpz/XML for umExportFilelegado GeneXus 9 (<GXObject><Elemento>por nome, sem GUID de tipo),Get-GeneXusImportPackageObjectInventory.ps1detecta o perfil automaticamente e devolvelegacyFormatDetected=true, itenstypeStatus="known-legacy"(type= tipo moderno paraequivalentougxlegacy/<Elemento>paraorphan),unknownTypeCount=0eunknownTypesDiscovery=[]— não confundir esse0/[]com "zero tipos desconhecidos verificados" do fluxo moderno: o fail-closed de tag desconhecida vive no parser legado. Pacote misto (legado + moderno no mesmoExportFile) é BLOCK (fail-closed). O contrato moderno de inventário (params, exit, shape de decisão) é inalterado. Regra operacional dona:02-regras-operacionais-e-runtime.md; representação:01k-registro-elementos-legados.md; materialização:xpz-sync/SKILL.md(seção EXPORTS LEGADOS)
COMMUNICATION
Responda no idioma do usuário
Seja direto sobre estado operacional, riscos e limites
Declare quando o resultado é apenas operacional e ainda depende de confirmação funcional
Em operações de import, declare o sub-estado explicitamente pelo nome (
importação real efetiva provada,importação real efetiva provada por evidência de stdout (falha no pós-processamento do wrapper),sucesso operacional sem prova de import efetivo,importação real efetiva provada, efeito não confirmado na IDE,importação real efetiva provada, geração de runtime pendente,importação real falhou por source, etc.) — não deixe o leitor inferir o nível de prova a partir do relato narrativoQuando o usuário quiser evidência complementar além de
importedItems, apresentar as duas opções em paralelo: acionarxpz-msbuild-build(headless) ou abrir a KB na IDE e executar o build por lá — ambas são opcionais e o resultado do build não reescreve nem substitui o sub-estado de import já declaradoQuando o sub-estado for
importação real efetiva provada, build tiver sido executado e o usuário reportar que o comportamento ainda não mudou, oferecer explicitamente achecagem de frescor de runtimecomo próximo passo nomeado antes de sugerir nova edição; declarar nominalmente o que será verificado:nav_objs.xml(ObjStatus=genreqindica geração pendente;ObjStatus=nogenreqindica gerado) e timestamps dos artefatos gerados (.cs,.aspxou equivalente); NVG excluído por não ser acessível sem abrir a IDE; se a checagem indicar artefatos de versão anterior, classificar comoimportação real efetiva provada, geração de runtime pendentee propor reabertura + rebuild antes de qualquer nova ediçãoQuando import OK mas evento não reflete na UI ou no
.csgerado, declarar explicitamente que isso não reabre sub-estado de import — tratar como hipótese de mecanismo (b) e orientar inspeção pós-build do.csou handoff paraxpz-msbuild-build, conforme seçãoMecanismos de descarte de codigo de evento pelo gerador GeneXusem 02-regras-operacionais-e-runtime.mdQuando a rodada for
ensaio metodológico/experimental, declarar isso nominalmente no resumo e separar:- objetivo metodológico da rodada
- resultado operacional observado
- confirmação funcional ainda não coberta
Quando a rodada envolver iteração sobre objeto único, consolidar o resultado no seguinte template antes de recomendar próximo passo:
Rodada N — <NomeDoObjeto> (<TipoObjeto>) - XML local atualizado: sim / não - XML bem-formado: sim / não - Sanity: limpo / warnings / bloqueante - Preview: reconhecido / não reconhecido / não executado - Import real: <sub-estado nomeado> - Warnings conhecidos: <lista ou "nenhum">Quando houver ambiguidade de contexto, interrompa a execução e peça definição explícita
Não use linguagem otimista para sugerir segurança que ainda não foi validada empiricamente
Quando a exportação headless gerar um
.xpzpara alimentar a pasta paralela da KB, declarar explicitamente o marcoXPZ geradoSe a geração do
.xpzfizer parte do caminhoBdo setup inicial, diferenciar explicitamente a faseexportação headless concluídada fase posteriormaterialização em ObjetosDaKbEmXmlSe o pedido do usuário for apenas gerar o
.xpz, parar no artefato gerado; só prosseguir para materialização quando o pedido for seguir com o setup ou com a materializaçãoEm exportação seletiva com
-ObjectList, a presença de-ObjectListclassifica a rodada como seletiva/cirúrgica para fins de sub-estado e de confronto de extras; nunca reportar ao usuário a contagem de entradas de-ObjectListcomo se fosse a contagem do pacote — a contagem comunicada é sempre a real do.xpz(packageInventory.totalObjects/totalAttributeseobjectsByType, ou inspeção manual equivalente)Em exportação seletiva/cirúrgica cujo objetivo declarado seja obter somente os itens de
-ObjectList, passar-DependencyType "None" -ReferenceType "None"por padrão operacional; isso previne o arrasto na origem e não substitui o inventário pós-export. Se o usuário pedir dependências/referências, declarar que a rodada deixou de ser pacote estritamente nominal antes de executar e continuar exigindo inventário completo.Quando
export.jsontrouxerpackageInventory, reproduzir no relatório ao usuário antes de declarar o XPZ como conclusão limpa: totais reais,objectsByType,systemObjectsPresent,attributesTopLevelUnreconciled/inventoryWarningsquando existirem; em export seletiva comextrasCount > 0, listar todos os extras do bloco<Objects>por nome (Tipo:Nome) — comextrasCount <= 50podem estar emextrasSample; comextrasSampleTruncated=trueou para lista nominal completa abrirnominalInventoryAt/extrasFullListAt/packageInventoryPath/artifacts.PackageInventoryPathe lerpackage-inventory.json; comattributesTopLevelUnreconciled=true, listar cada atributo top-level do bloco<Attributes>por nome (não sótotalAttributes);extrasSamplecobre somente extras de objeto no resumo JSON e não substitui a comunicação nominal completa do pacote ao humano — não basta o campo existir só no JSON; quandoexportErrors,invalidTypesRejectedouknownStdOutNoise(top-level) estiverem presentes, reproduzi-los também no texto ao usuário
STRUCTURE
Arquivos de referência e quando carregar:
| Referência | Carregar quando |
|---|---|
| README.md | Sempre - regras editoriais e posicionamento da base |
| 02-regras-operacionais-e-runtime.md | Regras operacionais, precedência e restrições da trilha XPZ; carregar também quando import falhar em código de evento (Unknown function/src0294) ou quando import OK mas evento não aparecer no .cs/UI (mecanismos de descarte do gerador) |
| 10-base-operacional-msbuild-headless.md | Sempre - base operacional, riscos conhecidos e interface vigente |
| xpz-msbuild-build/SKILL.md | Handoff quando import OK mas evento não aparece no .cs/UI (mecanismo b), quando o usuário pedir build/specify como evidencia complementar, ou para checagem de frescor de runtime após import — sem reabrir sub-estado de import |
EXPECTED INTERFACE
Esta skill assume, como interface operacional, scripts pequenos e explicitamente parametrizados. Test-GeneXusMsBuildSetup.ps1, Open-GeneXusKbHeadless.ps1, Test-GeneXusXpzImportPreview.ps1, Invoke-GeneXusXpzExport.ps1, Invoke-GeneXusXpzImport.ps1, Invoke-GeneXusXpzImportThenBuild.ps1, Read-MsBuildImportSignals.ps1, Test-MsBuildImportSignalsClassifier.ps1, Extract-XpzObject.ps1, Get-GeneXusObjectSummary.ps1, Compare-GeneXusPanelShape.ps1, Test-GeneXusKbConsistency.ps1, Test-GeneXusImportFileEnvelope.ps1, Get-GeneXusImportPackageObjectInventory.ps1, GeneXusMsBuildWatcherSupport.ps1, Watch-GeneXusMsBuildLog.ps1, Resolve-GeneXusGeneratedCsPath.ps1 e Test-GeneXusRuntimeFreshness.ps1 já foram materializados nesta fase; os demais não devem ser tratados como já implementados sem confirmação explícita. Os motores de montagem de import_file.xml referenciados no fluxo preferido (Build-GeneXusImportFileEnvelope.ps1 para montagem direta a partir de XMLs de objeto e template clonável, New-XpzImportPackage.ps1 como wrapper PowerShell do motor Python New-XpzImportPackage.py para montagem por frente da pasta paralela) também estão materializados em scripts/ e são cobertos pela skill xpz-builder e pelas regras operacionais em 02-regras-operacionais-e-runtime.md; quando esta skill aponta para eles (anti-padrão de export-casca, inventário pré-import), trata-se de uso operacional vigente, não de promessa aspiracional. Ao usar Build-GeneXusImportFileEnvelope.ps1, -AcervoPath <ObjetosDaKbEmXml> é obrigatório, e objetos realmente modificados devem ser declarados por -ModifiedObjectNames ou -ModifiedObjectGuids para acionar o bloqueio mecânico de lastUpdate velho, igual ao acervo ou futuro sem justificativa antes da gravação do pacote.
Estado atual da materialização:
Test-GeneXusMsBuildSetup.ps1: implementado como probe (sondagem técnica inicial) não invasivoOpen-GeneXusKbHeadless.ps1: implementado para abertura e fechamento controlados da KB, com contexto ativo e sem import/exportTest-GeneXusXpzImportPreview.ps1: implementado paraPreviewModede importação e já validado nesta conversa com XPZ realInvoke-GeneXusXpzExport.ps1: implementado para exportação headless de XPZ com parâmetros explícitos e diagnóstico JSONInvoke-GeneXusXpzImport.ps1: implementado para importação real de XPZ com parâmetros explícitos e diagnóstico JSONInvoke-GeneXusXpzImportThenBuild.ps1: implementado como wrapper integrador de import real seguido deBuildAllpós-import; executa o build somente quando o JSON de import está apto (exitCode=0, semblockingReasons, semmsBuildCategoryBBlockede sem status de falha/bloqueio); parâmetros de build amplo/caro continuam sujeitos aos gates do wrapper receptor (-ForceRebuildexige-AllowWideRebuild,CompileMains=trueouDetailedNavigation=trueexigem-AllowCostlyBuildOptions, com confirmações explícitas quando aplicável)Read-MsBuildImportSignals.ps1: implementado para leitura compacta demsbuild.stdout.log/msbuild.stderr.log, comimportedItems,expectedItemsRaw/importedItemsRaw,expectedItemsCanonical/importedItemsCanonical,itemAliasMatches, warnings, erros, ruídos conhecidos de stdout,gxImportLogReadStatus/gxImportLogReadError, versão/Environment ativos, sucesso da task Import e warnings de layout agrupados por PanelTest-MsBuildImportSignalsClassifier.ps1: implementado como bateria mínima de validação do leitor compacto (ruído conhecido deCssProperties.json, lock deGxImport.log, equivalênciaPanel/SDPanelemitemAliasMatches); ver também09-inventario-e-rastreabilidade-publica.mdExtract-XpzObject.ps1: implementado para extrair um objeto específico de XML/XPZ ou retornar resumo JSON sem imprimir o pacote inteiroGet-GeneXusObjectSummary.ps1: implementado para resumir objeto GeneXus e, para Panel, expor shape compacto de level/layout, controles, gridData, actions, eventos serializados emdetail/@events,actionEventCoverage,namedEventNames,standardEventNames,variableEventNamesetapEventNames, e, para WebPanel classico, o blocowebpanel(tables comtableTypeFlex/Responsive edepth, controls, buttons em<action>e<ucw>Button, eventNames, coverage), sem despejar CDATACompare-GeneXusPanelShape.ps1: implementado para comparar dois Panels por shape compacto, incluindo Object attrs, Pattern/Data version, level/layout, controles, eventos serializados classificados (namedEventNames,standardEventNames,variableEventNames,tapEventNames) e cobertura action/eventTest-GeneXusKbConsistency.ps1: implementado como wrapper deCheckKnowledgeBasecom diagnóstico JSON, classificação das categorias empíricas documentadas e confirmação interativa obrigatória paraFix="true"Test-GeneXusImportFileEnvelope.ps1: implementado para validação estrutural estática doimport_file.xmlantes de qualquer chamada ao MSBuild; não invasivo, não abre KBGet-GeneXusImportPackageObjectInventory.ps1: inventário determinístico deimport_file.xml, XML com raiz<ExportFile>ou.xpz(XML interno único); lista<Object>sob<Objects>,Attributetop-level sob<Attributes>, agregaobjectsByType, detecta objetos de plataforma/SDK viascripts/gx-platform-objects.json(Get-SystemObjectsPresent→systemObjectsPresent), sinalattributes-top-level-em-export-cirurgicoem export seletiva semTransactionna lista declarada, e confronta delta declarado (-DeclaredDeltaPathou-DeclaredDeltaItemsno formatoTipo:Nome, separador;ou linha)Invoke-GeneXusXpzExport.ps1: após exportação com XPZ gerado, embutepackageInventoryresumido no diagnóstico e grava semprepackage-inventory.jsoncompleto no diretório de artefatos da rodada; o resumo expõenominalInventoryAt(lista nominal completa no sidecar) sempre que o sidecar for gravado;extrasSample(extras de<Objects>quandoextrasCount ≤ 50),extrasSampleTruncatedquandoextrasCount > 50(omissão deextrasSampleno resumo); em export seletiva com confronto de delta,extrasFullListAtaponta para o mesmo sidecar (lista completa de extras de<Objects>); atributos top-level não entram emextrasSample; falha de inventário marcainventoryDegraded=truesem rebaixarexitCodeda task MSBuild; regressão mínima do contrato resumido:scripts/Test-GeneXusPackageInventorySupportSelfTest.ps1(sentinelaGENEXUS_PACKAGE_INVENTORY_SUPPORT_SELFTEST_OK)GeneXusMsBuildWatcherSupport.ps1: implementado como helper comum do contrato de watcher dos wrappers MSBuild; centraliza-StartWatcher,-MonitorLogPath,watcherContext,timing.phasese leitura do log do monitorWatch-GeneXusMsBuildLog.ps1: implementado como monitor incremental de execução headless; usar em preview/import/export grandes para acompanhar o MSBuild sem depender do chat; em importação real de pacote amplo ou com muitosWorkWithForWeb, usar watcher como padrão operacional recomendadoResolve-GeneXusGeneratedCsPath.ps1: implementado como resolvedor somente leitura do.csgerado a partir dekb_environment_web_dirsemkb-source-metadata.md; usar antes deTest-GeneXusRuntimeFreshness.ps1quando a checagem exigir-GeneratorOutputPathTest-GeneXusRuntimeFreshness.ps1: implementado como diagnóstico somente leitura de frescor de runtime; usar quando o sub-estado forimportação real efetiva provada, geração de runtime pendentepara confirmar se artefatos de runtime já refletem a versão importada
Scripts nesta frente:
Test-GeneXusMsBuildSetup.ps1- status atual: implementado como probe (sondagem técnica inicial) não invasivo
- descoberta de
MsBuildPathquando omitido:vswhere.exee catálogo estático emscripts/GeneXusMsBuildPathContract.ps1; JSON incluimsBuildProbe(resolutionSource,vsWhere,candidates[])
Test-GeneXusMsBuildDiscoveryContract.ps1- status atual: implementado; regressão mínima do catálogo de candidatos MSBuild (não substitui probe real com GeneXus/VS instalados)
Open-GeneXusKbHeadless.ps1- status atual: implementado para abertura e fechamento controlados da KB
- saída esperada:
status,summary,exitCode,executionEvidence,stage,requestedContext,observedContext,artifacts,stderrContent,blockingReasons,warnings,strategyTrace,msBuildExitCodetop-level como compatibilidade transitória quando existir, e caminhos dos logs
Test-GeneXusXpzImportPreview.ps1- status atual: implementado para
PreviewModesem importação real, comIncludeItemseExcludeItemsvalidados nesta instalação - contrato de resiliência do pós-processamento: o bloco que faz parse do stdout, monta
importedItemse serializa o diagnóstico JSON deve ser envolvido emtry/catch; em caso de exceção interna (ex:Exception calling Joinpor entrada inesperada, falha de serialização, qualquer erro posterior à conclusão da taskImportdo MSBuild em modo preview), o script não deve perder a evidência já coletada — deve emitir um diagnóstico parcial contendo no mínimo:executionEvidence.msBuildExitCodecomo local canônico do valor bruto da task MSBuild,msBuildExitCodetop-level apenas como compatibilidade transitória quando existir,exitCodeclassificado pelo wrapper, caminho domsbuild.stdout.log, lista de marcas__IMPORTED_ITEM__extraídas diretamente do log bruto antes da exceção (quando disponível), marca explícitapostProcessingFailed=true,diagnosticDegraded=true, mensagem da exceção e indicação de queimportedItemsdeve ser confirmado por leitura do log bruto; quandoexecutionEvidence.msBuildExitCode=0e o preview não tiver alterado a KB, o status emitido épreview apenas com falha no pos-processamentoe o sub-estado equivalente épreview concluído sem alterar a KB (falha no pós-processamento do wrapper)— não éfalha operacional; nunca substituirexecutionEvidence.msBuildExitCodepor código de exceção do PowerShell, nem rebaixar oexitCodeclassificado — ambos são evidência primária de que a task de import em modo preview concluiu - contrato de sinais compactos: após o MSBuild, o wrapper deve gravar
msbuild.import.signals.jsonao lado dos logs brutos sempre que possível, consumindoRead-MsBuildImportSignals.ps1; quando a leitura compacta conseguir executar, o diagnóstico JSON também deve embutir o objeto parseado emcompactSignals; falha nessa leitura degrada o diagnóstico, mas não reclassifica a task Import como falha operacional quandoexecutionEvidence.msBuildExitCodee stdout indicarem conclusão
- status atual: implementado para
Invoke-GeneXusXpzExport.ps1- status atual: implementado para exportação headless de XPZ com parâmetros explícitos e validação da task carregada
- contrato de resiliência do pós-processamento: o bloco que faz parse do stdout, lê
__EXPORTED_FILE__,__OPEN_OUTPUT__,GetActiveVersion,GetActiveEnvironmentegxWarnings, e serializa o diagnóstico JSON deve ser envolvido emtry/catch; em caso de exceção interna (ex:Exception calling Joinpor entrada inesperada, falha de serialização, qualquer erro posterior à conclusão da taskExportdo MSBuild), o script não deve perder a evidência já coletada — deve emitir um diagnóstico parcial contendo no mínimo:executionEvidence.msBuildExitCodecomo local canônico do valor bruto da task MSBuild,msBuildExitCodetop-level apenas como compatibilidade transitória quando existir,exitCodeclassificado pelo wrapper, caminho domsbuild.stdout.log, valor do marcador__EXPORTED_FILE__quando o stdout já estiver lido, marca explícitapostProcessingFailed=true, mensagem da exceção e indicação de que o caminho do XPZ exportado deve ser confirmado por existência do arquivo e leitura do log bruto; quandoexecutionEvidence.msBuildExitCode=0e o arquivo XPZ existir, o status emitido ésucesso operacional com falha no pos-processamentoe o sub-estado equivalente éexportação headless concluída e XPZ gerado (falha no pós-processamento do wrapper)— não éfalha operacional; nunca substituirexecutionEvidence.msBuildExitCodepor código de exceção do PowerShell, nem rebaixar oexitCodeclassificado — ambos são evidência primária de que a task de export concluiu
Invoke-GeneXusXpzImport.ps1- status atual: implementado para importação real de XPZ com parâmetros explícitos e diagnóstico JSON
- contrato de resiliência do pós-processamento: o bloco que faz parse do stdout, monta
importedItemse serializa o diagnóstico JSON deve ser envolvido emtry/catch; em caso de exceção interna (ex:Exception calling Joinpor entrada inesperada, falha de serialização, qualquer erro posterior à conclusão da taskImportdo MSBuild), o script não deve perder a evidência já coletada — deve emitir um diagnóstico parcial contendo no mínimo:executionEvidence.msBuildExitCodecomo local canônico do valor bruto da task MSBuild,msBuildExitCodetop-level apenas como compatibilidade transitória quando existir,exitCodeclassificado pelo wrapper, caminho domsbuild.stdout.log, lista de marcas__IMPORTED_ITEM__extraídas diretamente do log bruto antes da exceção (quando disponível), marca explícitapostProcessingFailed=true,diagnosticDegraded=true, mensagem da exceção e indicação de queimportedItemsdeve ser confirmado por leitura do log bruto; o agente que consumir esse diagnóstico parcial aplica o sub-estadoimportação real efetiva provada por evidência de stdout (falha no pós-processamento do wrapper)quando o log bruto contiver evidência do objeto esperado, conforme regra em RESPONSIBILITIES; nunca substituirexecutionEvidence.msBuildExitCodepor código de exceção do PowerShell, nem rebaixar oexitCodeclassificado — ambos são evidência primária de que a task de import concluiu - contrato de sinais compactos: após o MSBuild, o wrapper deve gravar
msbuild.import.signals.jsonao lado dos logs brutos sempre que possível, consumindoRead-MsBuildImportSignals.ps1; quando a leitura compacta conseguir executar, o diagnóstico JSON também deve embutir o objeto parseado emcompactSignals;importedItemspode ser preenchido a partir desses sinais quando a montagem principal vier vazia por degradação do diagnóstico
Invoke-GeneXusXpzImportThenBuild.ps1- status atual: implementado para encadear import real e
BuildAllpós-import com parada condicional - saída esperada: JSON único com
status/roundtripStatus,summary,exitCode,importJson,buildJson,importReadyForBuild,buildSkippedReason,importProcess,buildProcess,resolvedPaths,artifacts,blockingReasons,warningsestrategyTrace - regra de segurança: se
Invoke-GeneXusXpzImport.ps1falhar, bloquear, produzir Categoria B, não gravar JSON interpretável ou retornarstatusde falha/bloqueio,Invoke-GeneXusKbBuildAll.ps1não é chamado; reportarbuildJson=nulle explicar embuildSkippedReason - gates de build propagados:
-AllowWideRebuild/-ConfirmWideRebuild,-AllowCostlyBuildOptions/-ConfirmCostlyBuildOptionse-AllowReorg/-ConfirmReorgsão apenas repassados aoInvoke-GeneXusKbBuildAll.ps1; a autorização humana e as frases exatas continuam sendo responsabilidade do chamador conformexpz-msbuild-build - flags de validação de deploy bin propagadas:
-PostImportDeployValidation,-StrictDeployBinChecke-SkipDeployBinChecktambém são apenas repassadas aoInvoke-GeneXusKbBuildAll.ps1(checagem de publicação noweb\binresolvido porkb_environment_web_dirs; gate com exit 49 quando ativo) — categoria distinta dos gates de autorização acima: são opções de validação, não têm frase exata nem par-Confirm*e não exigem autorização humana; contrato do gate emxpz-msbuild-build
- status atual: implementado para encadear import real e
Read-MsBuildImportSignals.ps1- status atual: implementado
- objetivo: ler logs brutos de preview/import sem despejar CDATA ou stdout inteiro na conversa
- parâmetros:
-Path(diretório de artefatos ou stdout),-StdOutPath,-StdErrPath,-ExpectedItems,-Stage,-OutputPath,-AsJson - saída esperada:
importedItems,expectedItemsRaw/importedItemsRaw,expectedItemsCanonical/importedItemsCanonical,itemAliasMatches,warnings,errors,knownStdOutNoise,gxImportLogReadStatus/gxImportLogReadError,diagnosticDegraded,activeVersion,activeEnvironment,importTaskSuccess,layoutWarningsagrupados por Panel e contadores compactos knownStdOutNoisedeve registrar mensagens conhecidas de ambiente no stdout sem promovê-las a erro; o casocssproperties-access-deniedcobreO acesso ao caminho 'C:\Program Files (x86)\GeneXus\GeneXus18\CssProperties.json' foi negado., quando a rodada também preserva evidência de sucesso (Bem sucedido,Import Task Sucessoou marcador equivalente)
Test-MsBuildImportSignalsClassifier.ps1- status atual: implementado
- objetivo: validar extração/classificação de
Read-MsBuildImportSignals.ps1sem abrir KB - uso típico: regressão local após mudança no leitor compacto ou nos wrappers de preview/import
Extract-XpzObject.ps1,Get-GeneXusObjectSummary.ps1,Compare-GeneXusPanelShape.ps1- status atual: implementados
- objetivo: evitar despejo de XML/XPZ ou CDATA gigante durante triagem de pacote, diagnóstico de Panel e comparação de shape
- uso típico: extrair um único objeto por nome/tipo, resumir
Part/identidade/shape e comparar Panels exportados pela IDE contra Panels gerados localmente
Test-GeneXusKbConsistency.ps1- status atual: implementado; classifica KB consistente, inconsistências detectadas, check parcial por timeout da Etapa 3 e KB inacessível;
Fix="true"exige confirmação interativa
- status atual: implementado; classifica KB consistente, inconsistências detectadas, check parcial por timeout da Etapa 3 e KB inacessível;
Test-GeneXusImportFileEnvelope.ps1- status atual: implementado
- runtime: executar em
pwsh7.4 ou superior; o script declara#requires -Version 7.4e Windows PowerShell 5.1 não é runtime suportado - objetivo: validação estrutural estática do
import_file.xmlantes de qualquer chamada ao MSBuild; não invasivo, não abre KB, não requer GeneXus instalado - parâmetros obrigatórios:
-InputPath(caminho doimport_file.xml) - parâmetros opcionais:
-PanelReferencePath(objeto ou pacote XML/XPZ comparável usado para confirmar parlevel id/layout idem Panel) - saída esperada:
status(apto para prosseguir|apto com ressalvas|não apto para prosseguir),checks(mapa de verificações individuais),objectCount,blockingReasons,warnings,information - verificações realizadas: XML bem-formado; raiz
<ExportFile>; blocos obrigatórios<KMW>,<Source>,<Objects>,<Dependencies>; ausência de declaração XML interna dentro de<Objects>; ausência de texto solto ou placeholder literal em<Objects>; GUIDs válidos por objeto;Source/@kbeSource/Version/@guidem formato GUID - regra Panel: sem
-PanelReferencePath, Panel retornapanel-level-layout-unverifiedcomo ressalva; com referência que contenha o mesmo par, retornapanel-level-layout-confirmedapenas eminformation; referência informada sem par correspondente retornapanel-level-layout-suspicious - regra cross-KB: formato GUID valido não basta para import headless; quando houver KB nativa local esperada,
Source/@kbdo pacote/template deve corresponder a essa KB. Divergencia indica pacote de outra KB e bloqueia automacao por agente; encaminhar para avaliacao/importacao manual pela IDE, conforme02-regras-operacionais-e-runtime.md.
Get-GeneXusImportPackageObjectInventory.ps1- status atual: implementado para
import_file.xml, XML com raiz<ExportFile>ou.xpz(XML interno único) - objetivo: inventariar o conteúdo efetivo do pacote antes de preview/import, separando
Objects,Attributestop-level, tipos mapeados, GUIDs e confronto opcional com delta declarado - parâmetros obrigatórios:
-InputPath(import_file.xml, XML equivalente ou.xpz) - parâmetros opcionais:
-DeclaredDeltaPath,-DeclaredDeltaItems,-FailOnDeltaMismatch,-CatalogPath,-SystemModulesCatalogPath,-SystemExternalObjectsCatalogPath - quando o pacote cotidiano já é
import_file.xml, não fabricar.xpzsó para validar — chamar o motor direto sobre oimport_file.xml
- status atual: implementado para
Watch-GeneXusMsBuildLog.ps1- status atual: implementado
- objetivo: monitorar incrementalmente o log de uma execução headless em andamento; encerra sozinho quando o processo termina; usar especialmente em importações de KB grande onde o invocador pode encerrar por timeout antes do MSBuild concluir
- parâmetros obrigatórios:
-Pid,-LogPath - parâmetros opcionais:
-MonitorLog,-IntervalSeconds(default 5),-SilenceThresholdSeconds(default 120)
GeneXusMsBuildWatcherSupport.ps1- status atual: implementado
- objetivo: helper comum para os wrappers MSBuild dispararem o watcher e registrarem
watcherContext/timing.phasescom o mesmo contrato
Test-GeneXusRuntimeFreshness.ps1- status atual: implementado
- objetivo: diagnosticar se o runtime GeneXus reflete a versão mais recente de um objeto após import+build; somente leitura, não abre KB, não invoca MSBuild
- parâmetros obrigatórios:
-KbPath,-ObjectName,-ImportedAt - parâmetros opcionais:
-ObjectType(reservado para uso futuro),-GeneratorOutputPath(se omitido, deriva como<KbPath>\CSharpModel\web),-AsJson - saída esperada:
runtime-fresh(nogenreq + artefatos posteriores ao import),runtime-stale(genreq ou artefatos anteriores),runtime-unknown(objeto não encontrado emnav_objs.xmlou artefatos não localizados)
Get-GeneXusKbProperty.ps1- status atual: implementado
- objetivo: leitura de propriedade em qualquer nível da KB sem alterar nenhum dado
- parâmetros obrigatórios:
-KbPath,-Level(KB | Version | Environment | Generator | DataStore | Object),-Name,-WorkingDirectory,-LogPath - parâmetros opcionais:
-Target(obrigatório quando-LevelforGenerator,DataStoreouObject; nome do generator, datastore ou objeto),-GeneXusDir,-MsBuildPath,-VersionName,-EnvironmentName,-VerboseLog - saída esperada:
status(leitura concluída|falha de leitura),level,target(quando aplicável),propertyName,propertyValue,exitCode,executionEvidence,blockingReasons,warnings,strategyTrace,msBuildExitCodetop-level como compatibilidade transitória quando existir, e caminho do log - tasks confirmadas no assembly:
GetKnowledgeBaseProperty,GetVersionProperty,GetEnvironmentProperty,GetGeneratorProperty(parâmetro opcionalGenerator),GetDataStoreProperty(parâmetro opcionalDataStore),GetObjectProperty(parâmetroObjectobrigatório); todas expõemNameePropertyValuecomo interface comum - incompatibilidade conhecida e verificada empiricamente:
GetVersionProperty -Name Nameretorna o nome descritivo da versão (ex:"Design"), não o identificador aceito porSetActiveVersion(ex:"wsEducacaoSpTeste");GetEnvironmentProperty -Name Nametem a mesma incompatibilidade comSetActiveEnvironment; para obter o identificador compatível com essas tasks de posicionamento, usarGetActiveVersioneGetActiveEnvironment
Contrato inicial específico de Test-GeneXusMsBuildSetup.ps1:
- obrigatórios:
-WorkingDirectory,-LogPath - opcionais:
-GeneXusDir,-MsBuildPath,-KbPath,-VerboseLog - regra de contrato:
-WorkingDirectorycontinua explícito; quando o caminho seguro ainda não existir, o probe pode criar exatamente essa pasta e registrar isso no diagnóstico - descoberta de
MsBuildPathquando omitido:vswhere.exe(-all -sort, componente MSBuild,Current\Binantes deamd64) e, em seguida, catálogo estático emscripts/GeneXusMsBuildPathContract.ps1(Visual Studio 18/2022/2019,Program FileseProgram Files (x86)); detalhes e exemplo JSON em10-base-operacional-msbuild-headless.md - saída JSON do probe inclui
msBuildProbe(resolutionSource,vsWhere,candidates[]compath/source/exists/selected) além destrategyTrace - regressão mínima do catálogo (sem substituir probe real):
scripts/Test-GeneXusMsBuildDiscoveryContract.ps1 - códigos de saída contratuais:
0paraapto para prosseguir10a16para bloqueios operacionais esperados com diagnóstico estruturado90para falha interna do script antes de diagnóstico completo
Parâmetros transversais esperados:
-KbPath-GeneXusDir-MsBuildPath-VersionName-EnvironmentName-WorkingDirectory-LogPath(caminho de arquivo de log onde o wrapper grava o JSON de resultado; apontar para um diretório existente é bloqueado cedo com exit 50 — gate fail-fastparametro-invalido, antes de abrir a KB; motorscripts/GeneXusMsBuildLogPathSupport.ps1)-VerboseLog-StartWatcher(quando suportado pelo wrapper, disparaWatch-GeneXusMsBuildLog.ps1antes do MSBuild; requer-MonitorLogPath; ausência de-MonitorLogPathdeve bloquear cedo por política com exit 46)-MonitorLogPath(caminho do log próprio do watcher; quando existir, alimentatiming.phases)-WatcherIntervalSeconds(default 5; intervalo válido: 1-60)-WatcherSilenceThresholdSeconds(default 120; intervalo válido: 30-3600)
O contrato de watcher acima vale para Test-GeneXusXpzImportPreview.ps1,
Invoke-GeneXusXpzExport.ps1 e Invoke-GeneXusXpzImport.ps1. Ele é centralizado em
scripts/GeneXusMsBuildWatcherSupport.ps1; ao evoluir watcher, timing ou
watcherContext, manter o helper comum como sede da regra e evitar lógica divergente
dentro dos wrappers.
Parâmetros específicos de exportação:
-XpzPath-ObjectList(nome canônico da seleção por nome; sinônimo aceito-ObjectNames; tipo[string[]], aceita string única com lista ou array) — lista de objetos para exportação seletiva; para múltiplos objetos, separar entradas com ponto-e-vírgula (;) no formatoTipo:Nome; exemplo:Procedure:ProcA;WebPanel:WPB;Transaction:TrC; o prefixoTipodeve ser o rótulo aceito pela task Export, não necessariamente o nome do tipo no catálogo interno nem o retorno de KbIntelligence — ver 10a-gx-export-task-labels.md eexportTaskLabelemscripts/gx-object-type-catalog.jsonquando montar lista a partir do índice ou do catálogo; a presença de-ObjectListclassifica a rodada como exportação seletiva/cirúrgica para confronto de extras; após a exportação, seguir a secção Inventário do pacote após export seletivo (packageInventorynoexport.json+package-inventory.json); nunca reportar ao usuário a contagem de entradas da lista como contagem do pacote; quando exportar um único objeto, o formatoTipo:Nomecontinua válido sem separador-ParallelKbRoot/-IndexPath/-CatalogOverridePath— obrigatórios em export seletivo (-ObjectListsem-ExportAll/full): o wrapper consultaKbIntelligenceantes do MSBuild (objectListPreflightnoexport.json,gateContext=export). Homônimo ou índice ausente/inválido → exit 35 (estágiopre-export-identity). Objeto ausente no índice mas possivelmente só na KB nativa → aviso e segue MSBuild; inventário pós-export continua obrigatório. Em sessão na pasta paralela da KB, passar a raiz da sessão em-ParallelKbRoot.-DependencyType— em export seletivo/cirúrgico que deve conter somente a lista nominal, usar"None"; valores além deNonee o default formal quando omitido permanecem pendentes de confirmação nesta base-ReferenceType— em export seletivo/cirúrgico que deve conter somente a lista nominal, usar"None"; valores além deNonee o default formal quando omitido permanecem pendentes de confirmação nesta base-ExportKbInfo-ExportAll
Parâmetros específicos de importação:
-InputPath— nome canônico da entrada primária (aliases retrocompatíveis-XpzPathe-Path); aceita.xpz(formato compactado padrão GeneXus),.xmlou.import_file.xml(envelope GeneXus com raiz<ExportFile>) como insumo válido para preview e import real, desde que o envelope tenha sido validado porTest-GeneXusImportFileEnvelope.ps1na mesma rodada; a extensão aceita não é restringida pelo nome do parâmetro-PreviewMode-UpdateFilePath-IncludeItems— recorte seletivo no formatoTipo:Nome(separador;,,ou linha); classifica a rodada como import seletivo paraobjectListPreflight-ExcludeItems-ParallelKbRoot/-IndexPath/-CatalogOverridePath— obrigatórios quando-IncludeItemsestiver preenchido: pré-validação no índice antes do MSBuild (objectListPreflightnoimport.jsonou preview,gateContext=import, estágiopre-import-identity). Homônimo ou índice ausente/inválido → exit 35;not_in_index→ aviso e segue; inventário do pacote (passo 6c) continua obrigatório antes de import real-AutomaticBackup-ImportType-ImportKbInformation— tri-state: omitido oufalsesignificam não emitir o atributo na task Import (omissão do atributo faz a task aplicar seu próprio default, documentado comotrueem10-base-operacional-msbuild-headless.md); apenastrueemite o atributo e exige que a task carregada exponha a propriedade. Bloqueio por assinatura só ocorre quando o valor fortrueem instalação sem suporte;falseé tratado como omissão tanto no preview quanto no import real
INVENTÁRIO DO PACOTE ANTES DO IMPORT REAL
- O gate
Test-GeneXusImportFileEnvelope.ps1valida estrutura do envelope; não substitui a verificação do conjunto de objetos que efetivamente seria aplicado à KB na importação. - Use
Get-GeneXusImportPackageObjectInventory.ps1 -InputPath <import_file.xml ou .xpz>como inventário determinístico preferido. Para confronto com lista esperada, use-DeclaredDeltaPath <arquivo>ou-DeclaredDeltaItems "<lista Tipo:Nome separada por ; ou linha>". Para bloquear automaticamente divergência, acrescente-FailOnDeltaMismatch. - Checklist obrigatório antes de importação real quando o pacote não foi montado na mesma rodada pelo fluxo
xpz-buildercom manifesto explícito na conversa (objetos + intenção do lote):- Extrair a lista completa de objetos no
<ExportFile>(por exemplo todos os<Objectsob<Objects>, ou conteúdo equivalente dentro do.xpz). - Confrontar com o delta declarado / pedido do utilizador (tipo e nome de cada objeto em foco). Cada objeto extra deve ser classificado no espírito de
xpz-buildercomo mudança pedida, auxiliar necessária ou extra não pedida; se for extra não pedida num pacote que o utilizador descreveu como correção pontual ou cirúrgica → ABORT salvo confirmação explícita. - Se aparecer objeto de plataforma/SDK GeneXus (por exemplo
PackagedModule:GeneXusouExternalObject:Cameracom nome no catálogoscripts/gx-platform-objects.json, refletido emsystemObjectsPresent) num pacote tratado como delta mínimo → ABORT salvo pedido explícito desse conteúdo. - Se em export seletiva houver muitos atributos top-level (
totalAttributesalto) semTransactionna lista declarada (attributesTopLevelUnreconciled/ warningattributes-top-level-em-export-cirurgico) → tratar como arrasto de base (risco de estrutura de banco), declarar ao usuário e ABORT salvo confirmação explícita antes de import/sync.
- Extrair a lista completa de objetos no
- Recomendado executar o mesmo inventário antes de
PreviewModequando o pacote veio de export MSBuild, reempacotamento manual ou qualquer fluxo em que o agente não controlou fecho do lote na conversa. - Exportação com lista explícita (
-ObjectList/Objects) não garante, por si só, pacote com um único objeto nem equivalência “lista nominal = conteúdo do zip”. Para pacote cirúrgico nominal, use-DependencyType "None" -ReferenceType "None"como prevenção na origem; ainda assim, nunca tratar tudo o que veio no pacote como intencional sem inventário e confronto.
Categorias A e B (MSBuild headless)
Distinção obrigatória entre comportamento esperado da task GeneXus e rejeição explícita no log. Fonte numérica: scripts/msbuild-exit-codes.catalog.json (hoje exitCode 48 = Categoria B).
Categoria A — comportamento esperado / decisão do agente (pode manter exitCode=0 do wrapper):
- extras por
DependencyType/ReferenceType,systemObjectsPresent, atributos top-level em export cirúrgica (attributesTopLevelUnreconciled) - tratamento operacional: inventário, declaração ao usuário, Decisão pós-gates com ABORT antes de import real quando houver extra não previsto — autorização de import na sessão não cobre esses casos
Categoria B — rejeição MSBuild/compilador (barragem estrutural no wrapper):
- linhas
error :no stdout/stderr (exportErrors,importErrors,previewErrors,buildErrors,specifyErrorsno top-level do JSON, conforme o wrapper) invalidTypesRejectednão vazio (export)- mensagens
error :no stderr não classificadas como ruído conhecido GeneXus 18 (ex.: ruído estruturalcontext [anonymous]já filtrado nos wrappers de build) - quando
executionEvidence.msBuildExitCode=0mas Categoria B estiver populada, o wrapper rebaixa paraexitCode=48(msBuildCategoryBBlocked=true); o artefato pode existir no disco apenas para inspeção - o agente nunca declara export/import/preview/build como entrega operacional limpa nesse cenário; PARAR e pedir decisão explícita do usuário antes de materializar, importar, sync ou push
- na Decisão pós-gates,
exitCode=48é bloqueio cego — autorização ampla de import não cobre Categoria B (análogo a extras da Categoria A)
A frase «sinalizar sem rebaixar exitCode» aplica-se somente à Categoria A.
INVENTÁRIO DO PACOTE APÓS EXPORT SELETIVO
- Aplicar sempre que a exportação headless concluir com XPZ gerado (
exitCodeclassificado pelo wrapper = 0, sem Categoria B, e arquivo existente), antes de declarar ao usuário que a exportação está concluída de forma limpa ou de seguir para materialização/import/sync. - Motor preferido:
Invoke-GeneXusXpzExport.ps1já chama o inventário e preenchepackageInventorynoexport.json+package-inventory.jsonno diretório de artefatos. Quando o inventário automático falhar (inventoryDegraded=true), abrir o.xpzmanualmente ou chamarGet-GeneXusImportPackageObjectInventory.ps1 -InputPath <xpz>antes de fechar a rodada. - Classificação da rodada: quando
-ObjectListfoi informado (e não houve-ExportAll/-FullExport), a rodada é exportação seletiva/cirúrgica — o confronto de extras usa somente objetos do bloco<Objects>cujo parTipo:Nome(case-insensitive) não está na lista. Quando-ExportAllou-FullExport, não há conceito de “extra” face à lista;packageInventoryreporta apenas contagens reais. - Critério de extra (seletiva): objeto presente no pacote com
Tipo:Nomenormalizado ausente de-ObjectList. Atributos top-level entram emtotalAttributese na lista completa, mas não entram na conta de extras da lista nominal. - Atributos top-level em export cirúrgica: quando
-ObjectListnão inclui nenhumaTransactione o pacote trazAttributesob<Attributes>, o motor emite warningattributes-top-level-em-export-cirurgicoeattributesTopLevelUnreconciled=true— sinal de arrasto de base (ex.: export só de WorkWith/Procedure que puxou atributos de TRN). ComTransactionna lista, atributos top-level são esperados (controle negativo: sem esse warning). PromoveoperationalSubStatepara extras não conciliados quandoexportErrorsestiver vazio. - Objetos de plataforma/SDK: entradas em
scripts/gx-platform-objects.jsoncomkindpackagedModuleouexternalObject. No inventário,PackagedModule/Module(GUIDc88fffcd-...ou00000000-...-000006) eExternalObject(GUIDc163e562-...) presentes no pacote aparecem emsystemObjectsPresentcomname,kindetypeNamedo XML. Exemplo:PackagedModule:GeneXus, não apenasModule:GeneXus. Num pacote cirúrgico, qualquer entrada emsystemObjectsPresentnão pedida exige declaração explícita ao usuário antes de preview/import/sync — mesmo que o MSBuild tenha concluído comexitCode=0. - Anti-padrão (nomeado): contagem da lista no lugar do pacote — relatar “28 objetos exportados” contando entradas de
-ObjectListenquanto o.xpzcontém centenas de<Object>/<Attribute>. A contagem no relatório ao usuário vem depackageInventory(ou inventário manual equivalente), não da lista solicitada. - Anti-padrão (nomeado): amostra de extras no lugar da lista completa — relatar
extrasSampleoutotalAttributescomo se fossem o conteúdo real do pacote, omitir atributos top-level quandoattributesTopLevelUnreconciled=true, ou ignorarpackage-inventory.jsonquando o motor já gravounominalInventoryAt/packageInventoryPath/artifacts.PackageInventoryPath. Em export seletiva comextrasCount > 0ou comattributesTopLevelUnreconciled=true, a comunicação ao usuário deve listar cada item por nome, separado por bloco (<Objects>e<Attributes>). O JSON resumido serve à máquina; não substitui a comunicação ao humano. - Anti-padrão (nomeado): fallback silencioso por nome — pedir
Tipo:Nome(ou lista equivalente em-ObjectList/ delta declarado) e aceitar como conclusão limpa um pacote cujo objeto efetivo não corresponde à identidade pedida, sem reclamação visível no log e sem Categoria B. Distinguir três situações:- Tipo rejeitado no log (
error : ... is not a valid type,invalidTypesRejectedpopulado): não é silencioso — o wrapper rebaixa paraexitCode=48; artefato só para inspeção; declarar risco de a task GeneXus ter resolvido só por nome antes do rebaixamento. - Divergência de rótulo Export vs catálogo (ex.: lista
WorkWith:Nome, pacoteWorkWithForWeb:Nomecom o mesmoNome): não é fallback GeneXus por nome inexistente; é equivalência documentada emexportTaskLabel/ 10a-gx-export-task-labels.md. O inventário registradeltaComparison.aliasResolutions[](regraexportTaskLabel); usarrequestedItemsFound,aliasResolutionCountnopackageInventorye o sidecar — não tratarrequestedItemsMissingisolado como falha quando o alias estiver populado. - Silêncio real — tipo aceito pela task,
exitCode=0, sem Categoria B, mas identidade canônica não demonstrada no pacote (homônimo entre tipos, nome errado que ainda “achou” outro objeto, tipo no pacote diferente do pedido sem alias documentado): ABORT operacional; listar pedido vs inventário; não materializar/importar/sync. O wrapper bloqueia homônimo e índice inválido/ausente antes do MSBuild em export seletivo (-ObjectList) e import/preview seletivo (-IncludeItems) — exit 35;not_in_indexgera aviso e não bloqueia (objeto pode existir só na KB nativa). Depois do export/import, inventário obrigatório e confronto explícito.
- Tipo rejeitado no log (
- Erros
error :no stdout com sucesso aparente da task (Categoria B): a taskExportpode emitir linhaserror :(ex.:X is not a valid type) e ainda concluir comExport Sucessoe__EXPORTED_FILE__. O wrapper captura emexportErrors/invalidTypesRejectedviaRead-MsBuildImportSignals.ps1 -Stage exporte rebaixa paraexitCode=48quando a lista não estiver vazia. Nunca tratar como conclusão limpa. Em seletiva com tipos rejeitados, declarar risco de resolução por nome (homonímia) e verificarexportTaskLabelem10a-gx-export-task-labels.md. - Ruído conhecido no stdout (export):
knownStdOutNoiseaparece no top-level doexport.json(espelhandostdoutSignals.knownStdOutNoiseemsbuild.export.signals.json) — não basta inspecionar sóstdoutSignals; caso típico:cssproperties-access-deniedpara acesso negado aCssProperties.jsonquando a task ainda conclui com sucesso aparente. - Sub-estados de export (operacionais, após inventário e sinais de stdout):
exportação concluída e inventário consolidado— XPZ existe, inventário obtido, semexportErrors, e (em seletiva) sem extras não conciliados nem itens pedidos ausentes nem módulos/ExternalObjects de plataforma não declarados nemattributesTopLevelUnreconciledexportação concluída, inventário com extras não conciliados— XPZ existe e inventário obtido, mas em export seletiva há extras, itens pedidos ausentes,systemObjectsPresentnão vazio e/ouattributesTopLevelUnreconcilednum pacote tratado como cirúrgico; declarar ao usuário antes de materializar/importar (somente quandoexportErrorsestiver vazio)exportação parcial com errors do MSBuild — artefato não confiável— XPZ existe,exportErrorse/ouinvalidTypesRejectednão vazios; wrapper comexitCode=48; reproduzir linhas ao usuário; prioridade sobre sub-estados de inventário “consolidado”; artefato só para inspeçãoexportação concluída sem inventário (degradado)— XPZ existe, masinventoryDegraded=true; inspeção manual obrigatória antes de fechar- Manter também
exportação headless concluída e XPZ gerado (falha no pós-processamento do wrapper)quandopostProcessingFailed=truee evidência primária do log/arquivo sustentarem o XPZ
Anti-padrão (nomeado): export MSBuild como “casca” + patch + import
- Evitar: exportar da KB só para obter um
.xpz, substituir manualmente o nó de um<Object>pelo XML da pasta paralela, reempacotar e importar sem inventário completo e sem alinhamento ao manifesto / delta. - Quando o XML autoritativo já está na pasta paralela (
ObjetosDaKbEmXmlou área de geração local), o caminho preferido para import headless é montarimport_file.xmlcom motor estruturado compartilhado:Build-GeneXusImportFileEnvelope.ps1para montagem direta a partir de XMLs de objeto e template válido, com-AcervoPath <ObjetosDaKbEmXml>obrigatório e objetos modificados declarados por-ModifiedObjectNamesou-ModifiedObjectGuids, ouNew-XpzImportPackage.ps1/.pypara montagem por frente emObjetosGeradosParaImportacaoNaKbNoGenexususandokb-source-metadata.mdou-TemplatePackagePathapontando para XML/import_file.xml ou.xpzcomparável (skillxpz-builder, metadados emkb-source-metadata.mdquando aplicável); no wrapperNew-XpzImportPackage.ps1o gate de drift 9-FD executa sempre antes do empacotamento (fail-closed):-AcervoPathé opcional e, quando omitido, o acervo canônico<RepoRoot>/ObjetosDaKbEmXmlé resolvido automaticamente; sem acervo resolvível o empacotamento é bloqueado, e o JSON reportaacervoResolvedBy(explicitouconvention). Isso bloqueia XMLs desatualizados na frente, em vez de fabricar.xpzpor export só para servir de envelope. Quando a evidência local indicar que o fluxo ativo de importação exige envelope completo no estilo exportação da IDE, use template comparável exportado pela IDE sem limitar essa regra a uma versão GeneXus específica.
Footgun (nomeado): import inócuo por lastUpdate velho
- Sintoma: um pacote cujo objeto tem
lastUpdatemenor ou igual ao do objeto vivo na KB é aceito pelo import sem erro (exitCode 0, semerror :no log), mas a KB não atualiza o objeto. O resultado parece sucesso e desperdiça um cicloimport+buildinteiro até se descobrir que nada mudou. O GeneXus exigelastUpdateestritamente maior que o do objeto vivo para efetivar a atualização. - Proteção upstream: o empacotamento por
New-XpzImportPackage.ps1roda o gate de drift 9-FD sempre (fail-closed);Build-GeneXusImportFileEnvelope.ps1roda o gate delastUpdatesempre, com-AcervoPathobrigatório. Em ambos,lastUpdatevelho ou igual ao acervo em objeto declarado modificado bloqueia antes da gravação do pacote. - Limite honesto da proteção: os dois gates comparam contra o acervo (
ObjetosDaKbEmXml, retrato do último sync), não contra a KB viva. Se a KB avançou desde o último sync, umlastUpdate"mais novo que o acervo" ainda pode ser<=ao objeto vivo, e o footgun escapa mesmo com o gate verde. O gate cobre o caso comum (esquecer de bumpar); não substitui conferir contra a KB real quando há suspeita de acervo defasado. Para garantia contra a KB viva, ressincronizar o acervo (xpz-sync) antes de empacotar.
Exportação headless e alinhamento ao pedido
- Não iniciar exportação headless da KB como passo próprio quando o utilizador pediu apenas importar alterações já existentes na pasta paralela, salvo pedido explícito de exportação ou confirmação explícita de que a exportação é indispensável (por exemplo impossibilidade documentada de obter
KMW/Source/identidade de envelope por outro meio).
WORKFLOW (fluxo de trabalho)
- Reler a documentação local aplicável e usar 10-base-operacional-msbuild-headless como referência principal
- Validar se o cenário é compatível com uso controlado e ambiente controlado
- Confirmar que
C:\Program Files (x86)será tratada como somente leitura - Executar primeiro um probe (sondagem técnica inicial) não invasivo para validar:
KbPathGeneXusDirMsBuildPathWorkingDirectoryLogPath- existência de
Genexus.Tasks.targetsSeWorkingDirectoryestiver em caminho seguro e ainda não existir, o probe pode auto-criar exatamente essa pasta.
- Resolver
GeneXusDireMsBuildPathpor ordem explícita de precedência e fallback, registrando origem e descarte de candidatos quando aplicável - Classificar o resultado do probe (sondagem técnica inicial) como
apto para prosseguirounão apto para prosseguirO diagnóstico deve incluirstatus,summary,resolvedPaths,checks,blockingReasons,warningsestrategyTrace. O diagnóstico deve distinguirWorkingDirectoryjá existente deWorkingDirectoryauto-criado no caminho explícito e seguro. PreferirJSONcomo formato canônico inicial. 6b. Quando o objetivo for importação (preview ou real), executar o gate de validação do envelope antes de qualquer chamada ao MSBuild:- Chamar
Test-GeneXusImportFileEnvelope.ps1 -InputPath <caminho>; a saída de máquina é JSON por padrão. Para Panel com molde/pacote comparável disponível, passar também-PanelReferencePath <molde-ou-pacote>para confirmar o parlevel id/layout id - Interpretar o resultado:
não apto para prosseguir→ ABORT; apresentarblockingReasonsao usuário antes de prosseguir; não chamar MSBuildapto com ressalvas→ apresentarwarnings; exigir confirmação explícita do usuário antes de prosseguir para preview ou import realapto para prosseguir→ prosseguir normalmente
- Este gate é não invasivo: lê apenas o arquivo local, não abre KB, não requer GeneXus instalado
- Aplicar mesmo quando o arquivo vier de geração anterior já validada — o gate é obrigatório por rodada, não por sessão
6c. Antes de importação real: executar o inventário do pacote (lista completa de objetos no envelope) e confrontá-lo com o delta declarado, conforme a secção Inventário do pacote antes do import real. Preferir
Get-GeneXusImportPackageObjectInventory.ps1 -InputPath <pacote import_file.xml ou .xpz>; a saída de máquina é JSON por padrão. Se houver delta declarado em arquivoTipo:Nome, passar-DeclaredDeltaPathou-DeclaredDeltaItems; quando a rodada exigir bloqueio automático,-FailOnDeltaMismatch. Se o pacote contiver extras não conciliados, módulo/ExternalObject de plataforma não pedido ouattributesTopLevelUnreconcilednum pacote cirúrgico, ABORT salvo confirmação explícita do utilizador. Omitir este passo apenas quando o pacote foi gerado na mesma rodada pelo fluxoxpz-buildercom manifesto na conversa que já feche o lote esperado.
- Chamar
Decisão pós-gates (importação real autorizada na sessão)
Quando o usuário já autorizou importação real headless na mesma sessão (ex.: «pode importar», «gerar e importar», ou «sim»/«pode executar» a uma proposta explícita do agente que inclua import real) e o ambiente for controlado:
- Envelope + inventário: com
Test-GeneXusImportFileEnvelope.ps1→apto para prosseguire inventário do pacote (passo 6c) sem bloqueio, executarInvoke-GeneXusXpzImport.ps1na mesma rodada.apto para prosseguirvalida estrutura do envelope, não substitui o inventário nem autoriza ignorar extras. - Sem nova confirmação de import: o passo 6b é obrigatório por rodada, não uma nova autorização humana por rodada. Não encerrar a sessão só porque o envelope está apto.
- Preview dispensável: não exigir
Test-GeneXusXpzImportPreview.ps1antes do import real neste cenário. Preview permanece para rodadas exploratórias ou quando import real ainda não foi autorizado. - Pré-requisitos MSBuild: resolver
KbPath,VersionName,EnvironmentName,WorkingDirectoryeLogPath(passos 7–8) se ainda faltarem. - Watcher obrigatório: import real com
-StartWatchere-MonitorLogPath(ausência de-MonitorLogPathbloqueia cedo, exit 46). Não tratar watcher como opcional nesta skill. - Parada obrigatória (extras): se o inventário ou a conciliação com o delta revelar objeto extra não previsto — objeto, atributo top-level, módulo de plataforma ou ExternalObject fora do pedido da rodada, inclusive itens herdados de export/reempacotamento sem classificação — ABORT imediato antes de qualquer import real; apresentar lista completa do que está no pacote, origem provável (export gordo, merge na montagem, dependência não justificada) e aguardar decisão explícita do usuário. Autorização de import na sessão não cobre importar extras: impacto pode incluir builds longos (ex.: módulos de plataforma). Ver também anti-padrão reempacotar lixo de export.
- Ressalvas:
apto com ressalvasno envelope, bloqueio de assinatura da task, falha de permissão ou limite do ambiente → parar e reportar; não substituir por import na IDE sem declarar. 7b. Categoria B no export/preview: se a exportação que alimentou o pacote saiu comexitCode=48,exportErrorsouinvalidTypesRejected, ABORT antes do import real — autorização de import na sessão não cobre rejeição MSBuild no log. - Build separado: autorização de import não autoriza
xpz-msbuild-buildnem reorg ampla; build só após proposta explícita aceita pelo usuário.
Anti-padrão (nomeado): parada após envelope apto — envelope apto para prosseguir, usuário já autorizou import real, inventário sem bloqueio, e o agente não chama Invoke-GeneXusXpzImport.ps1.
Anti-padrão (nomeado): reempacotar lixo de export — receber .xpz/export com objetos além do delta, incluir esses itens no import_file.xml da frente atual sem classificar e sem confirmação, e tratar o pacote como cirúrgico.
Invocação canônica (ajustar caminhos):
pwsh -NoProfile -File scripts/Invoke-GeneXusXpzImport.ps1 `
-KbPath "<caminho-kb>" `
-InputPath "<caminho.import_file.xml ou .xpz>" `
-VersionName "<versao>" `
-EnvironmentName "<ambiente>" `
-WorkingDirectory "<pasta-msbuild-segura>" `
-LogPath "<pasta-artefatos>/import/import.log" `
-MonitorLogPath "<pasta-artefatos>/import/watcher.log" `
-StartWatcher
- Só depois abrir a KB e confirmar versão ativa e
Environmentativo quando aplicável Quando o objetivo for confirmar versão e Environment para usar em-VersionName/-EnvironmentName, usarGetActiveVersioneGetActiveEnvironment— nuncaGetVersionProperty -Name NamenemGetEnvironmentProperty -Name Name, pois esses retornam propriedades de metadados incompatíveis com o identificador aceito porSetActiveVersion/SetActiveEnvironment(verificado empiricamente:GetVersionProperty -Name Nameretornou"Design"enquantoGetActiveVersionretornou"wsEducacaoSpTeste"na mesma KB) - Se o objetivo for inspeção, priorizar:
PreviewModeUpdateFile, quando suportado pela task carregada
- Se o objetivo for exportação, executar com parâmetros explícitos e conferir o artefato gerado
Antes de emitir parâmetro sensível de exportação, validar a assinatura efetiva do wrapper e da task carregada para evitar sintaxe presumida incorreta.
Em exportação full, preferir
-FullExportquando o wrapper expuser esse atalho. Após exportação com XPZ gerado: lerpackageInventoryeoperationalSubStatenoexport.json; abrirpackage-inventory.jsonsempre que o resumo apontarattributesTopLevelUnreconciled=true,extrasCount > 0, ousystemObjectsPresentnão vazio (caminho emnominalInventoryAt,packageInventoryPathouartifacts.PackageInventoryPath); a lista nominal completa é obrigatória no relatório ao usuário nesses casos — incluindo cada atributo top-level por nome somente quandoattributesTopLevelUnreconciled=true(export seletiva semTransactionna lista); comTransactionna lista, atributos top-level esperados não exigem enumeração nominal no fechamento, salvo pedido explícito do utilizador — conforme a secção Inventário do pacote após export seletivo; só então declarar conclusão limpa ou seguir para materialização/import - Se o objetivo for importação real, exigir autorização explícita e ambiente controlado na sessão. Quando essa autorização já existir e os passos 6b–6c tiverem passado sem bloqueio de inventário, seguir Decisão pós-gates — inclusive executar
Invoke-GeneXusXpzImport.ps1sem nova confirmação intermediária só pelo envelope apto e semTest-GeneXusXpzImportPreview.ps1obrigatório nesse caminho. - Capturar e relatar:
exitCode— valor classificado pelo wrapper (0/32/41/42/48/...) combinando o código bruto do MSBuild com presença de artefato gerado,UpdateFileou outros sinais; é também o exit code do processoexecutionEvidence— evidência bruta da execução (msBuildExitCode,msBuildFailed,wrapperExitCode, logs brutos);executionEvidence.msBuildExitCodeé o local canônico do código bruto da task MSBuild, eblockingReasonsdeve priorizar causas acionáveis sem repetir o exit code bruto quando uma causa específica já existirmsBuildExitCodetop-level — compatibilidade transitória quando o wrapper já expõe esse campo; deve duplicarexecutionEvidence.msBuildExitCodee não substitui o bloco canônicopostProcessingFailed/postProcessingError— marca booleana e mensagem quando o pós-processamento do wrapper (parse de stdout, montagem do diagnóstico, serialização JSON ou gravação do log) falhou após o MSBuild já ter rodadodiagnosticDegraded/diagnosticDegradedReason— marca booleana e motivo curto quando o diagnóstico ficou parcial após o MSBuild concluir; pode ocorrer sempostProcessingFailed=truequando a saída principal foi montada, mas a leitura compacta de sinais ou outro complemento ficou degradadocompactSignals— leitura compacta preferencial no diagnóstico JSON de preview/import; se vier ausente, nulo ou insuficiente, usarmsbuild.import.signals.jsoncomo fallback auditável; reparsearmsbuild.stdout.log/msbuild.stderr.loginteiros apenas quando ambos estiverem ausentes ou insuficientesstdoutSignalscom campos semânticos do domínio (ex:importWarnings,exportMarkerFound/gxWarnings) — presente nos scripts de import/export; omitido nos scripts cujos sinais de domínio já fluem por campos próprios (observedContext,propertyValue,consistencyResult)observedContext.pathEnrichment— registro preventivo do enriquecimento dePATHaplicado pelo wrapper (applied,subdirsAdded,subdirsSkipped)stderrContent— linhas reais de stderr após filtrar ruído GeneXus 18; pode conter o padrão lateralmismatched input ']' expecting 'default', documentado em10-base-operacional-msbuild-headless.mdcomo ruído de runtime não bloqueante — não confundir com falha operacionalstderrFilteredNoise— linhas filtradas do ruído GeneXus 18 (context [anonymous] N:N attribute component isn't defined)- caminho do
.msbuild - caminho do log
- artefatos gerados ou consumidos
- Classificar o resultado como:
não apto para prosseguirimportação real efetiva provada—importedItemscontém explicitamente o objeto esperadoimportação real efetiva provada por alias normalizado—importedItemsRawdifere do item esperado cru, masexpectedItemsCanonicaleimportedItemsCanonicalcoincidem eitemAliasMatchesregistra a equivalência, comoPanel:Nome↔SDPanel:Nomeimportação real efetiva provada, efeito não confirmado na IDE—importedItemscontém o objeto esperado, mas build ou execução na IDE ainda exibe comportamento da versão anterior; verificar se KB foi reaberta e se build foi executado após reabertura antes de suspeitar de falha de importimportação real efetiva provada, geração de runtime pendente—importedItemscontém o objeto esperado, build foi executado após reabertura, mas artefatos de runtime ainda refletem versão anterior; indicadores: objeto emnav_objs.xml(raiz da KB nativa) comObjStatus=genreq(GeneXus marcou o objeto como pendente de geração), timestamp dos artefatos gerados (.cs,.aspxou equivalente) anterior ao timestamp do import; NVG não integra o diagnóstico somente leitura — é gerado ao abrir a KB na IDE e não é um arquivo estático; tratar como camada de diagnóstico separada do sub-estado de import e do diagnóstico de IDE desatualizada; diagnosticar pela checagem de frescor de runtime (somente leitura) antes de propor nova ediçãosucesso operacional sem prova de import efetivo—exitCode=0masimportedItemsausente ou não contém o objeto esperadoimportação real efetiva provada por evidência de stdout (falha no pós-processamento do wrapper)— o log bruto (msbuild.stdout.logou stdout capturado) contém__IMPORTED_ITEM__ou marca equivalente para o objeto esperado, mas o wrapper lançou exceção interna durante o pós-processamento (ex:Exception calling Join, falha de serialização doimport.json) impedindo queimportedItemsfosse populado no diagnóstico estruturado; a importação real aconteceu — o que falhou foi a camada de diagnóstico do wrapper; declarar nominalmente a origem da evidência (log bruto) e a exceção do wrapper como degradação de diagnóstico separadaimportação real efetiva provada com GxImport.log degradado— stdout/stderr eexecutionEvidence.msBuildExitCodesustentam sucesso, masgxImportLogReadStatus=lockedouerror; declarar o lock/erro como degradação de diagnóstico, não como causa principal da operaçãoimportação real falhou por source— erro rastreável ao conteúdo do objeto importado; quando a mensagem indicarUnknown function '<nome>',src0294ou equivalente em evento/Source, tratar como mecanismo (a) da seçãoMecanismos de descarte de codigo de evento pelo gerador GeneXusem 02-regras-operacionais-e-runtime.md — rejeição na importação, objeto não atualizado na KBimportação real falhou por envelope— erro na estrutura ou envelope do XPZimportação real falhou sem importedItems— falha sem trilha deimportedItemsno logfalha operacional— falha na camada do wrapper ou do MSBuild antes de atingir a task de importpreview bloqueado por assinatura da task— wrapper de preview abortou antes de chamar MSBuild porque a task carregada na instalação atual não expõe propriedade sensível solicitada em valor não neutro (UpdateFileinformado,ImportKbInformation=true); o pacote não foi testado em preview nessa rodada e a divergência deve ser declarada como contrato operacional entre chamada/wrapper e assinatura efetivaimport bloqueado por assinatura da task— análogo ao anterior na fase de importação real; o pacote não foi importado e a divergência deve ser declarada antes de qualquer correçãochamada corrigida por parâmetro sensível omitido— após bloqueio por assinatura, a rodada foi repetida com o parâmetro sensível omitido (apenas para valores neutros), com declaração explícita prévia da divergência detectada e da correção aplicada; este sub-estado complementa o sub-estado principal de preview ou import resultante da nova rodada, não o substituipreview reconheceu o objeto— objeto esperado apareceu no retorno do previewpreview apenas— preview concluído sem evidência de reconhecimento do objeto esperadopreview apenas com falha no pos-processamento— preview concluído sem alterar a KB (executionEvidence.msBuildExitCode=0) e evidência primária do log bruto preservada, mas o pós-processamento local do wrapper falhou e o JSON saiu compostProcessingFailed=true; não éfalha operacionaloperação concluída, porém pendente de confirmação funcional- em exportação com XPZ gerado, declarar também o sub-estado de export quando
operationalSubStateestiver presente no diagnóstico:exportação concluída e inventário consolidado,exportação concluída, inventário com extras não conciliados,exportação parcial com errors do MSBuild — artefato não confiávelouexportação concluída sem inventário (degradado)— reproduzirexportErrors/invalidTypesRejected/knownStdOutNoise(top-level) quando existirem; comexitCode=48oumsBuildCategoryBBlocked=true, PARAR antes de materializar/importar; nunca fechar export seletiva relatando só a contagem de-ObjectList - em import real ou preview, ler
importErrors/previewErrorsno top-level; comexitCode=48, tratar como Categoria B e não declarar conclusão limpa - quando aplicável, acumular também o marcador narrativo
ensaio metodológico/experimental, sem substituir a classificação operacional principal
- Recomendar o próximo passo seguro; quando o sub-estado for
importação real efetiva provadae o usuário quiser evidência complementar, apresentar as duas opções em paralelo:
- acionar
xpz-msbuild-build(headless) com-ParallelKbRoot,-PostImportDeployValidatione-EnvironmentNamealinhado adeployment_environment_nameno metadata (ou valor explícito do usuário) —compilou limpoouspecify e generate concluídosreforçam o handoff no environment usado; exit 49 ou statuscompilou-mas-dll-destino-desatualizadaindicam ausencia de publicacao fresca noweb\binresolvido porkb_environment_web_dirsemkb-source-metadata.md(DLL de objeto ou config) — não declarar IIS/self-host OK;GxNetCoreStartup.dllvelho sozinho não dispara exit 49 - abrir a KB na IDE e executar o build por lá
Recomendar reabertura da KB na IDE quando o teste exigir observação posterior, independentemente da opção de build escolhida
Se o sub-estado for
importação real efetiva provadae o usuário não observar o efeito esperado na IDE, diferenciar explicitamente as hipóteses: - IDE ainda carregando versão anterior: KB não foi reaberta desde o import, ou foi reaberta mas build não foi executado depois
- Sintomas concretos de IDE desatualizada: mesmo erro persiste após reabertura + rebuild, propriedades do objeto exibem data/versão anterior ao import, output gerado é idêntico ao da rodada anterior
- Nenhum desses sintomas invalida o sub-estado de import já declarado — o diagnóstico de IDE desatualizada é camada separada
Quando o sub-estado for
importação real efetiva provada, build tiver sido executado após reabertura da KB e o usuário reportar que o comportamento ainda não mudou, oferecer achecagem de frescor de runtimecomo trilha de diagnóstico nomeada antes de sugerir nova edição: - Resolver antes o caminho do
.csgerado comscripts\Resolve-GeneXusGeneratedCsPath.ps1 -KbPath <caminho> -ParallelKbRoot <pasta-paralela> -ObjectName <nome> -EnvironmentName <environment-quando-necessario> -AsJson, usandokb_environment_web_dirsdekb-source-metadata.md - Se o metadata não cobrir o environment, bloquear e encaminhar para
xpz-kb-parallel-setup; não usar glob recursivo nem inferirCSharpModel\webcomo substituto em KB multi-environment - Em seguida executar
scripts\Test-GeneXusRuntimeFreshness.ps1 -KbPath <caminho> -ObjectName <nome> -ImportedAt <timestamp-do-import> -GeneratorOutputPath <webDirectory-resolvido> -AsJsonpara verificar automaticamente os dois indicadores; a saída JSON indicaruntime-fresh,runtime-staleouruntime-unknown - Verificar
nav_objs.xml(raiz da KB nativa): confirmar se o objeto aparece comObjStatus=nogenreq;ObjStatus=genreqindica que a geração está pendente após o import - NVG excluído da checagem somente leitura: é gerado ao abrir a KB na IDE e não é um arquivo estático acessível sem abertura
- Comparar timestamps dos artefatos gerados (
.cs,.aspx, ou equivalente da instalação) com o timestamp do import - Se qualquer indicador mostrar artefato de versão anterior: classificar como
importação real efetiva provada, geração de runtime pendentee propor reabertura da KB seguida de novo build antes de qualquer nova edição - Essa checagem é somente leitura, não invasiva e não altera o sub-estado de import já declarado
- Se a exportação gerou um
.xpzfull para a pasta paralela da KB, declarar explicitamente:
- caminho do artefato gerado
- status operacional da exportação
- warnings estruturais relevantes
- se a execução para no
.xpzgerado ou se seguirá para materialização
- Se o pedido do usuário for seguir com o setup depois da exportação full, anunciar a mudança de fase para materialização em
ObjetosDaKbEmXmlantes de sair da trilhaMSBuild
WWP IMPORT ORDER
Aplica-se quando os pacotes a importar contêm objetos WorkWithPlus. Siga fases separadas para evitar erros de referência e não misture estrutura base com instâncias de pattern.
Sequência de importação
- Importar
SEM_WWP(preferir dry-run viaPreviewModeprimeiro) - Validar log de conflito/import
- Importar
COM_WWPou aplicar pattern na IDE - Importar pacote de instâncias/custom (
WorkWithPluswc*,wp*, etc.) - Importar pacote(s) de correção cirúrgica
- Build + Reorganizer em ambiente de teste
Limpeza pós-import
import_file não remove objetos antigos automaticamente. Planejar limpeza manual na IDE para:
- Transactions antigas substituídas
- SubtypeGroups obsoletos
- PatternInstances antigas que serão regeneradas
- Procedures/WebPanels gerados automaticamente e já substituídos
Após a limpeza, reaplicar WWP na Transaction final para regenerar base consistente.
Ciclo de validação
- Build após cada fase de import
- Classificar erros por categoria:
- Referência ausente (
non-defined object) - Duplicidade em metadata/pattern
- Incompatibilidade de assinatura em procedures/calls
- Referência ausente (
- Corrigir no menor pacote possível (cirúrgico)
- Rebuild até zerar regressão introduzida por aquela fase
QUALITY CHECKLIST
- A skill foi tratada como capacidade operacional validada, com uso controlado
-
C:\Program Files (x86)permaneceu estritamente somente leitura - O probe (sondagem técnica inicial) não invasivo ocorreu antes de qualquer abertura de KB
- O probe (sondagem técnica inicial) devolveu diagnóstico estruturado completo
- O probe (sondagem técnica inicial) respeitou o contrato de parâmetros obrigatórios, opcionais e
exitCode -
KbPath,GeneXusDir,MsBuildPath,WorkingDirectoryeLogPathforam explicitados - Antes de abrir a KB por MSBuild em preview, import real ou export, o bloqueio preventivo de concorrência por KB foi executado; se
msBuildConcurrency.status=blockedouexitCode=46, a rodada foi abortada e o conflito foi reportado ao usuário, sem tentar enfileirar nem aguardar - O probe só auto-criou
WorkingDirectoryquando o caminho explícito era seguro e permaneceu bloqueando caminhos proibidos, inválidos ou ambíguos -
GeneXusDireMsBuildPathforam resolvidos por precedência e fallback rastreáveis -
observedContext.pathEnrichmentregistrou o enriquecimento preventivo doPATH(applied,subdirsAdded,subdirsSkipped) -
Genexus.Tasks.targetsfoi validado -
PreviewModefoi priorizado quando a intenção era inspeção - Quando o objetivo era importação (preview ou real):
Test-GeneXusImportFileEnvelope.ps1foi executado antes de qualquer chamada ao MSBuild - O gate de envelope retornou
apto para prosseguirouapto com ressalvascom confirmação explícita do usuário - O gate de envelope não foi ignorado por presunção de que o arquivo já havia sido validado anteriormente
- Importação real só ocorreu com autorização explícita
- Com importação real autorizada na sessão e envelope
apto para prosseguir,Invoke-GeneXusXpzImport.ps1foi executado com-StartWatchere-MonitorLogPath, ou o bloqueio foi declarado explicitamente - Quando a rodada usou
Invoke-GeneXusXpzImportThenBuild.ps1,buildJsonsó foi considerado quandoimportReadyForBuild.ready=true; combuildSkippedReason, a rodada foi relatada como import não apto para build, não como build pendente esquecido - Quando a rodada usou
Invoke-GeneXusXpzImportThenBuild.ps1comForceRebuild=true,CompileMains=true,DetailedNavigation=trueou reorg autorizada, os gates e confirmações explícitas doInvoke-GeneXusKbBuildAll.ps1foram respeitados antes de repassar-AllowWideRebuild,-AllowCostlyBuildOptionsou-AllowReorg - Não houve parada após envelope apto sem import real nem inclusão de extras de export no pacote sem ABORT e decisão do usuário
-
watcherContext.watcherLaunchedfoi verificado no JSON de resultado quando-StartWatcherera esperado; fora da Decisão pós-gates, sefalse, a ausência foi documentada e justificada explicitamente; dentro da Decisão pós-gates,-StartWatchercom-MonitorLogPathé obrigatório na mesma invocação deInvoke-GeneXusXpzImport.ps1—watcherLaunched=falsenesse caminho é falha ou bloqueio operacional a reportar ao usuário, não exceção por justificativa de ausência de watcher (alinhado a08-guia-para-agente-gpt.md) -
stdoutSignals,stderrContent,stderrFilteredNoise,exitCode,.msbuilde log foram registrados - O resultado foi separado entre sucesso operacional e confirmação funcional
- O resultado de import foi classificado com sub-estado explícito:
importação real efetiva provada,sucesso operacional sem prova de import efetivoou sub-estado de falha com causa nomeada — nunca apenassucesso operacionaloufalha operacionalpara operações de import - Quando o sintoma envolve evento GeneXus que não executa ou import falhou em código de evento, foi identificado se o caso é mecanismo (a) (
exitCode != 0,errorsnoimport.json, ouUnknown function/src0294no log) ou mecanismo (b) (import OK, handler ausente/vazio no.csapós build) — conforme 02-regras-operacionais-e-runtime.md, seçãoMecanismos de descarte de codigo de evento pelo gerador GeneXus; (a) não foi tratado como bug de runtime, (b) não foi tratado como falha de import/envelope - Com
src0056…end of the ruleemTransactionRules, foi aplicado o anti-padrãotransaction-rule-on-event-with-attribute-parametere o Catálogo 1 em xpz-builder/responsibilities-by-type/transaction.md — não tratado como pontuação genérica - Quando preview ou import bloqueou por assinatura da task (propriedade sensível não exposta na instalação atual em valor não neutro), o sub-estado declarado foi
preview bloqueado por assinatura da taskouimport bloqueado por assinatura da task, e a divergência foi tratada como contrato operacional entre chamada/wrapper e assinatura efetiva — não como ajuste silencioso - Antes de repetir a chamada com parâmetro sensível omitido após bloqueio por assinatura, foram declaradas nominalmente (1) a propriedade ausente, (2) que o pacote não foi testado ou importado naquela rodada, (3) a divergência de contrato operacional, e (4) a correção aplicada; a nova rodada foi classificada com
chamada corrigida por parâmetro sensível omitidoem complemento ao sub-estado principal resultante - Quando o wrapper lançou exceção interna durante o pós-processamento mas o log bruto contém
__IMPORTED_ITEM__para o objeto esperado, o sub-estado declarado foiimportação real efetiva provada por evidência de stdout (falha no pós-processamento do wrapper)— nuncafalha operacionalnemsucesso operacional sem prova de import efetivo; a origem da evidência (log bruto) e a exceção do wrapper foram declaradas explicitamente como camadas separadas - Quando o wrapper de export lançou exceção interna durante o pós-processamento mas o log bruto contém
Export Sucessoe__EXPORTED_FILE__=<caminho>e o arquivo XPZ existe, o sub-estado declarado foiexportação headless concluída e XPZ gerado (falha no pós-processamento do wrapper)— nuncafalha operacionalnemXPZ não gerado; a origem da evidência (log bruto + existência do arquivo) e a exceção do wrapper foram declaradas explicitamente como camadas separadas - O script
Invoke-GeneXusXpzImport.ps1em uso tem o pós-processamento envolvido emtry/catche emite diagnóstico parcial comexecutionEvidence.msBuildExitCodecomo local canônico do valor bruto da task MSBuild,msBuildExitCodetop-level apenas como compatibilidade transitória quando existir,exitCodeclassificado pelo wrapper, marcas brutas extraídas do log,postProcessingFailed=trueediagnosticDegraded=trueem caso de exceção — não perde toda a evidência por falha de serialização - O script
Invoke-GeneXusXpzExport.ps1em uso tem o pós-processamento envolvido emtry/catche emite diagnóstico parcial comexecutionEvidence.msBuildExitCodecomo local canônico do valor bruto da task MSBuild,msBuildExitCodetop-level apenas como compatibilidade transitória quando existir,exitCodeclassificado pelo wrapper, valor de__EXPORTED_FILE__extraído do log bruto quando disponível epostProcessingFailed=trueem caso de exceção — não perde toda a evidência por falha de serialização - O script
Test-GeneXusXpzImportPreview.ps1em uso tem o pós-processamento envolvido emtry/catche emite diagnóstico parcial comexecutionEvidence.msBuildExitCodecomo local canônico do valor bruto da task MSBuild,msBuildExitCodetop-level apenas como compatibilidade transitória quando existir,exitCodeclassificado pelo wrapper, marcas brutas extraídas do log,postProcessingFailed=trueediagnosticDegraded=trueem caso de exceção — não perde toda a evidência por falha de serialização - Quando
diagnosticDegraded=trueaparecer compostProcessingFailed=false(por exemplo, falha ao gerar ou lermsbuild.import.signals.json), a rodada foi relatada como diagnóstico parcial/degradado, não como sucesso limpo nem como falha operacional automática - Quando o sub-estado for
importação real efetiva provadae o usuário não observar o efeito na IDE, o diagnóstico de IDE desatualizada foi tratado como camada separada — não como revisão do sub-estado de import - Quando o sub-estado for
importação real efetiva provada, build tiver sido executado e o usuário reportar que o comportamento ainda não mudou, achecagem de frescor de runtimefoi oferecida como próximo passo nomeado antes de sugerir nova edição - O sub-estado
importação real efetiva provada, geração de runtime pendentefoi aplicado quando artefatos de runtime (nav_objs.xmlcomObjStatus=genreqou timestamps de artefatos gerados anteriores ao import) ainda refletiam versão anterior após build confirmado; NVG pode ser consultado manualmente como indicador complementar, mas não integra a checagem somente leitura automatizada - Quando
-ObjectList(export) ou-IncludeItems(import/preview) foi usado,-ParallelKbRootou-IndexPathfoi passado;objectListPreflightno JSON foi lido (exit 35= parar; avisosnot_in_indexnão dispensam inventário pós-pacote) - Quando
-ObjectListfoi usado para export seletivo/cirúrgico com intenção de conter somente a lista nominal,-DependencyType "None"e-ReferenceType "None"foram passados; se foram omitidos ou trocados por outro valor, o usuário pediu dependências/referências explicitamente ou a rodada foi tratada como sujeita a extras antes de qualquer materialização/import/sync - Quando
-ObjectListfoi usado (um ou mais objetos), o formatoTipo:Nomee separadores foram validados; o inventário real do.xpzfoi obtido (packageInventorynoexport.jsonouGet-GeneXusImportPackageObjectInventory.ps1) e o relatório ao usuário reproduziu totais reais (totalObjects,totalAttributes,objectsByType,systemObjectsPresent) — não a contagem de entradas de-ObjectList - Em export seletiva, extras, módulos/ExternalObjects de plataforma e
attributesTopLevelUnreconciledforam confrontados com a intenção da rodada; sub-estadoexportação concluída, inventário com extras não conciliadosfoi declarado quando aplicável, antes de materializar/importar - Após export com XPZ gerado,
exportErrors,invalidTypesRejected,knownStdOutNoise,msBuildCategoryBBlockedeexitCodeforam lidos no top-level doexport.json; com Categoria B (exitCode=48), a rodada foi tratada como bloqueada e o XPZ só como inspeção, não como entrega limpa - Em export/import seletivo com
exitCode=0e sem Categoria B, a identidade de cada entrada pedida foi demonstrada no inventário (parTipo:Nomeliteral, ou entrada emaliasResolutions[]/packageInventory.aliasResolutionCountcom regraexportTaskLabelconforme 10a-gx-export-task-labels.md); entradas emrequestedItemsMissingsem alias correspondente, ou só nome batendo com tipo divergente sem equivalência documentada, foram tratadas como fallback silencioso por nome — ABORT e decisão explícita do usuário antes de materializar/importar/sync - Quando o
export.jsonapontouextrasCount > 0,attributesTopLevelUnreconciled=true, ousystemObjectsPresentnão vazio,package-inventory.jsonfoi lido e a lista nominal completa (não apenasextrasSampleou contagens) foi reproduzida ao usuário no relatório de fechamento — extras e objetos de plataforma (systemObjectsPresent:kind+name) por nome; atributos top-level por nome somente quandoattributesTopLevelUnreconciled=true - Em qualquer pergunta sobre conteúdo nominal do XPZ (mesma rodada ou sessão nova), o sidecar foi relido (caminho A) ou o motor de inventário foi reexecutado sobre o
.xpz(caminho B) antes de responder - Quando
-VersionNameou-EnvironmentNameforam informados explicitamente, confirmar que o valor veio deGetActiveVersion/GetActiveEnvironmentou de fonte comprovadamente compatível comSetActiveVersion/SetActiveEnvironment— nunca deGetVersionProperty -Name Namenem deGetEnvironmentProperty -Name Name - Quando a frente foi descrita por fluxo funcional e o usuário reportar "não mudou no navegador" após import confirmado, foi verificado primeiro (1) se o objeto importado é o alvo executado pelo fluxo real, antes de (2) checar frescor de runtime ou (3) propor nova edição
- Antes de importação real, o inventário completo de objetos no pacote foi confrontado com o delta declarado (ou o pacote veio da mesma rodada
xpz-buildercom manifesto que fecha o lote) - O inventário foi obtido por
Get-GeneXusImportPackageObjectInventory.ps1(aceitaimport_file.xmle.xpz) quando o script estava disponível; se houve delta declarado,-DeclaredDeltaPathou-DeclaredDeltaItemsforam usados - Quando o pacote veio de export MSBuild ou reempacotamento manual, não se assumiu que o conteúdo coincide com a lista nominal nem que extras eram intencionais sem confirmação
- Exportação headless não foi executada sem pedido ou confirmação explícita quando o objetivo do utilizador era apenas importar XML já existente na pasta paralela
CONSTRAINTS
- NEVER gravar qualquer artefato em
C:\Program Files (x86) - NEVER assumir defaults internos de importação ou exportação como seguros sem validação prática
- NEVER tratar importação real como comportamento implícito
- NUNCA encerrar rodada com importação real já autorizada na sessão, envelope
apto para prosseguire inventário sem bloqueio de extras, sem chamarInvoke-GeneXusXpzImport.ps1ou sem declarar bloqueio operacional explícito (permissão negada, limite do plano, assinatura da task, inventário com extra não previsto, etc.) - NUNCA tratar
Invoke-GeneXusXpzImportThenBuild.ps1como autorização para build incondicional: seimportReadyForBuild.ready=false, o build deve permanecer pulado e o motivo deve ser reportado - NUNCA prosseguir para importação real quando o inventário apontar extra não previsto, módulo/ExternalObject de plataforma não pedido ou
attributesTopLevelUnreconciledem pacote cirúrgico, esperando que a autorização ampla da sessão cubra o risco — ABORT, listar o pacote completo ao usuário e aguardar decisão - NUNCA executar importação real sem
-StartWatchere-MonitorLogPath; ausência bloqueia cedo (exit 46). Exceção apenas com bloqueio documentado e reportado ao usuário, nunca por omissão silenciosa - NEVER depender de
GeneXus Servercomo base operacional desta skill - NEVER chamar MSBuild para preview ou import sem antes executar
Test-GeneXusImportFileEnvelope.ps1no arquivo alvo - NEVER chamar MSBuild para preview, import real ou export quando o preflight
msBuildConcurrencyconfirmarMSBuild.exeem execução para a mesma KB; abortar com exit 46 e reportar o processo conflitante - NEVER usar o valor retornado por
GetVersionProperty -Name Namecomo-VersionName; para exportar da versão ativa, omitir-VersionName; se for necessário posicionar versão explicitamente, obter o identificador viaGetActiveVersion, não viaGetVersionProperty - ABORT se
KbPath, versão,Environment, pacote ou destino de logs estiverem ambíguos - ABORT se não houver ambiente controlado compatível com a fase solicitada
- ABORT se a operação não puder produzir trilha rastreável de logs e artefatos
- ABORT se
Test-GeneXusImportFileEnvelope.ps1retornarnão apto para prosseguir - NEVER prosseguir para importação real com pacote montado como export MSBuild + substituição manual de conteúdo + reempacotamento sem inventário completo dos objetos no pacote e conciliação explícita com o delta
- NEVER tratar export seletiva/cirúrgica como tentativa de pacote exatamente nominal quando
-DependencyTypee-ReferenceTypeforam omitidos; para esse objetivo, passarNone/None, ou declarar que a rodada aceita dependências/referências por decisão explícita do usuário - NEVER assumir que
-ObjectList(ou lista equivalente) com uma única entrada produz.xpzcontendo apenas esse objeto - NEVER reportar a contagem de entradas de
-ObjectListcomo se fosse a contagem do pacote gerado; a contagem comunicada ao usuário é sempre a real do.xpz(packageInventoryou inspeção manual equivalente) - NEVER declarar export seletiva como conclusão limpa sem
packageInventory(ou inventário manual) e sem reproduzir no texto ao usuário os totais reais,systemObjectsPresente sinais de atributos top-level quando existirem - NEVER declarar export/import/preview como concluído quando
exportErrors,importErrors,previewErrorsouinvalidTypesRejectedestiverem populados, ou quandoexitCode=48/msBuildCategoryBBlocked=true— mesmo comexecutionEvidence.msBuildExitCode=0e artefato no disco; pedir decisão explícita do usuário antes de qualquer próximo passo (materialização, import, sync, push) - NEVER declarar exportação ou importação seletiva/cirúrgica como conclusão limpa quando
exitCode=0, sem Categoria B e com inventário obtido, mas a identidade canônica pedida em-ObjectList/-IncludeItems(ou delta equivalente) não estiver demonstrada no pacote — entrada emrequestedItemsMissingque não seja só divergência de rótulo Export coberta porexportTaskLabelem 10a-gx-export-task-labels.md; objeto presente só peloNomecomTipono pacote diferente do pedido sem alias documentado. Tratar como fallback silencioso por nome (anti-padrão nomeado nesta skill): ABORT, listar pedido vspackage-inventory.json/ delta do inventário e aguardar decisão explícita — independentemente deexecutionEvidence.msBuildExitCode=0. Isto complementa o NEVER deexitCode=48e a pré-validação exit 35 em export/import seletivo (homônimo / índice obrigatório) - NEVER responder perguntas sobre conteúdo nominal do XPZ em qualquer sessão usando só memória de conversa anterior,
extrasSampleou contagens doexport.json— relerpackage-inventory.jsonquando o sidecar ou oexport.jsonda rodada ainda existir (caminho A), ou reexecutarGet-GeneXusImportPackageObjectInventory.ps1sobre o.xpz(caminho B), antes de responder - NEVER invocar exportação headless da KB quando o utilizador pediu somente importar alterações já existentes na pasta paralela, salvo pedido explícito de exportação ou confirmação explícita de que a exportação é indispensável para obter envelope/metadata utilizável
- NEVER incluir em pacote tratado como delta cirúrgico objetos de módulo de sistema, ExternalObject de plataforma GeneXus (catálogo
scripts/gx-platform-objects.json,systemObjectsPresent) ou arrasto massivo de atributos top-level semTransactionna lista (attributesTopLevelUnreconciled) salvo pedido explícito do utilizador