Skip to content

feat: diagnostico estruturado de pathwayDiagnostics em execute-candidates (fecha LayoutParserReact#86) - #200

Merged
elson-vinicius-lopes merged 5 commits into
developfrom
feat/execute-candidates-diagnostico-estruturado-86
Aug 27, 2026
Merged

feat: diagnostico estruturado de pathwayDiagnostics em execute-candidates (fecha LayoutParserReact#86)#200
elson-vinicius-lopes merged 5 commits into
developfrom
feat/execute-candidates-diagnostico-estruturado-86

Conversation

@elson-vinicius-lopes

Copy link
Copy Markdown
Collaborator

Resumo

Referencia/resolve LayoutParser/LayoutParserReact#86 (candidates vazio sem diagnóstico estruturado no execute-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 do execute-candidates, um item por pathway avaliado, com taxonomia de status/code (ex.: not_applicable, failed, sucesso).
  • correlationId propagado ponta a ponta (resposta + logging estruturado), permitindo cruzar a resposta HTTP com os logs do servidor para o mesmo request.
  • Logging estruturado (ILogger, mensagens com parâmetros nomeados) nos ramos not_applicable/failed de cada pathway, incluindo o correlationId.
  • Fix de sanitização do fragmento tcl-xsl que 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, LowCodeRunnerArgsTests x3)
  • Novos testes desta branch: TransformationExecutionControllerPathwayDiagnosticsTests (cobrindo os novos ramos de diagnóstico estruturado)

Test plan

  • dotnet build limpo
  • dotnet test sem regressão (mesmas 4 falhas pré-existentes de path)
  • Revisão do dono antes de merge (merge NÃO será feito por este PR)

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

elson-vinicius-lopes and others added 4 commits August 27, 2026 17:37
… 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.
@github-actions

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

…sercao no PR #200 (falso positivo por deslocamento, sem codigo novo)
@elson-vinicius-lopes
elson-vinicius-lopes merged commit 3ffc5ef into develop Aug 27, 2026
4 checks passed
@elson-vinicius-lopes
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant