feat: diagnostico estruturado de pathwayDiagnostics em execute-candidates (fecha LayoutParserReact#86) - #200
Merged
elson-vinicius-lopes merged 5 commits intoAug 27, 2026
Conversation
… em execute-candidates (issue #86) Adiciona campo aditivo pathwayDiagnostics[] (vazio nesta etapa, populacao por pathway fica para @lp-parser-llm) e correlationId ao response de execute-candidates, conforme desenho em docs/architecture/diagnostico-issue-86-diagnostico-estruturado-execute-candidates.md. Corrige tambem sanitizacao ausente no pathway tcl-xsl (3 pontos onde ex.Message/pipelineResult.Errors iam crus para o wire), alinhando com o padrao ja usado no pathway sysmiddle (LowCodeErrorSanitizer.ForWire). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
) Materializa o diagnóstico estruturado em execute-candidates: sysmiddle, tcl-xsl e ai-fallback agora sempre terminam em exatamente 1 PathwayDiagnostic (candidate_generated/not_applicable/failed), nunca silenciosos. Diferencia map_not_found de xsl_not_found via novo TransformationPipelineResult.ErrorCode (populado na origem, não por regex sobre a mensagem). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…xecute-candidates Issue LayoutParserReact #86: enriquece o XML doc do endpoint POST /api/transformationexecution/execute-candidates e adiciona seção bilíngue PT/EN no README com o contrato aditivo (taxonomia de status/code, semântica de candidates vazio com causa e a regra de sanitização de mensagens).
… not_applicable/failed QA (issue #86) apontou gap: os ramos de negócio que adicionam PathwayDiagnostic (sem mapper, MAP/XSL não encontrado, cooldown de IA, etc.) só escreviam em warnings/pathwayDiagnostics, sem log correlacionável — só exceções reais geravam log. Isso deixava o caso mais comum do bug relatado (candidates vazio por falta de mapper/arquivo) sem rastro em log, só na resposta HTTP. Adiciona LogInformation (not_applicable/candidate_generated) e LogWarning (failed) ao lado de cada PathwayDiagnostic.Add, com CorrelationId, pathway, status, code e a fonte da decisão (catálogo, gate de cooldown, ErrorCode do pipeline) quando disponível. Reforça os logs já existentes nos blocos catch com os mesmos campos estruturados.
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
…sercao no PR #200 (falso positivo por deslocamento, sem codigo novo)
elson-vinicius-lopes
deleted the
feat/execute-candidates-diagnostico-estruturado-86
branch
August 27, 2026 22:19
elson-vinicius-lopes
added a commit
that referenced
this pull request
Aug 28, 2026
…andidates-141 Reconcilia PR #207 (issue #141) com develop, que já absorveu as PRs irmãs #200 (issue #86), #201 (issue #139), #203 (issue #138) e #205 (issue #140) da mesma cadeia de trabalho. Conflitos eram todos overlap real entre PRs desta cadeia tocando os mesmos arquivos, não clash semântico: - LowCodeCandidateResult.cs: DecryptedMapperContent (#141) e MapperDecryptedContent (#138) eram o mesmo dado (mapper.DecryptedContent) sob nomes diferentes — unificado em DecryptedMapperContent, único campo, usado tanto por SysmiddleSectionMappingResolver (#138) quanto por TryComposeFieldMappings (#141). - LowCodeAutoTransformationService.cs: mesma duplicação de atribuição nos dois pontos de criação de LowCodeCandidateResult. - TransformationExecutionController.cs: TransformationCandidate agora preenche FieldMappings (#141) E SectionMappings/XmlNamespaces (#138) no mesmo objeto — funcionalidades complementares, ambas preservadas. - README.md: seções de documentação de fieldMappings (#141) e sectionMappings (#138) são independentes, mantidas as duas em sequência. - security-code-scan-baseline.json: entradas de linha para LowCodeAutoTransformationService.cs reconciliadas para 371/415 (linhas atuais pós-merge) — mesmos 2 achados de sempre (File.WriteAllTextAsync em inPath/metaPath), não vulnerabilidades novas. Nota adicionada ao _readme documentando o ajuste. dotnet build: 0 erros. dotnet test: 413/417 passando — as 4 falhas (SafePathResolverTests, LowCodeRunnerArgsTests) são pré-existentes, específicas de ambiente (assumem paths Windows, falham sob WSL/Linux), não relacionadas aos arquivos deste merge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumo
Referencia/resolve
LayoutParser/LayoutParserReact#86(candidates vazio sem diagnóstico estruturado noexecute-candidates).Causa raiz
O bug de "candidates vazio" propriamente dito já havia sido corrigido antes da issue ser aberta. O gap real era a ausência de um contrato estruturado de diagnóstico: quando um pathway (Pathway 1/Pathway 2) não produzia candidato, a API não expunha por quê de forma legível/correlacionável — só logs internos, sem retorno estruturado ao consumidor (BFF/front).
Contrato novo
pathwayDiagnostics[]no payload de resposta doexecute-candidates, um item por pathway avaliado, com taxonomia destatus/code(ex.:not_applicable,failed, sucesso).correlationIdpropagado ponta a ponta (resposta + logging estruturado), permitindo cruzar a resposta HTTP com os logs do servidor para o mesmo request.ILogger, mensagens com parâmetros nomeados) nos ramosnot_applicable/failedde cada pathway, incluindo ocorrelationId.tcl-xslque atravessava os diagnósticos (evita quebra de contrato quando o conteúdo do XSLT/TCL contém caracteres problemáticos).Documentação
Diagnóstico completo do investigação em
docs/architecture/diagnostico-issue-86-diagnostico-estruturado-execute-candidates.md, além de atualização de Swagger/README cobrindo o novo formato de resposta.Testes
dotnet build: 0 erros (só warnings pré-existentes, SCS0005 etc.)dotnet test: 399 passando (388 + 11 XslSynth.Core.Tests), 4 falhas pré-existentes de path Windows×Linux (não relacionadas a esta mudança —SafePathResolverTests,LowCodeRunnerArgsTestsx3)TransformationExecutionControllerPathwayDiagnosticsTests(cobrindo os novos ramos de diagnóstico estruturado)Test plan
dotnet buildlimpodotnet testsem regressão (mesmas 4 falhas pré-existentes de path)Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com