feat(ai): gera XSLT real via RepairOrchestrator/Ollama, substitui XML-direto como motor primario - #211
Merged
elson-vinicius-lopes merged 11 commits intoAug 29, 2026
Conversation
…Ollama em vez de XML direto
- Novo IXslSynthesizerService/RepairOrchestratorXslSynthesizerService encapsula o
RepairOrchestrator real de ai/XslSynth.Core (referencia in-process, sem boundary
Linux/WSL - Opcao B do design doc de 2026-08-21).
- AiTransformationCandidateService.RunLoopAsync tenta o motor novo primeiro; se nao
se aplicar (entrada nao-XML, mapper nao resolvido, excecao), degrada para o loop
legado XML-direto via Ollama - nunca quebra o job (contrato externo intacto).
- XSLT convergido e persistido em TransformationPipeline:XslPath, convencao
{mapperName}_{layoutName}.xsl (mesma que o pathway tcl-xsl ja le).
- TransformationCandidate ganha campo GeneratedXslt (aditivo).
- Testes novos cobrindo sucesso do synthesizer e degradacao para o legado; suite
completa (109 + 13) verde.
Limitacoes documentadas no codigo: resolucao de MapperGuid->Mapper via filtro sobre
GetAllMappersAsync (sem metodo direto no ICachedMapperService); resolucao do
caminho do XSD duplica a convencao privada de XsdValidationService.FindXsdFile.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…sem caminho de baixo risco
…arse posicional real Fecha o gap documentado em docs/architecture/decisao-pendente-input-xml- repairorchestrator-2026-08-29.md (Opcao 1 confirmada pela Aria): o RepairOrchestratorXslSynthesizerService tentava XDocument.Parse(TXT cru) e sempre falhava, tornando o motor novo codigo morto em producao. - ParsedFieldRootTreeBuilder (Services/Transformation/Ai/): converte ParsedField (parser posicional REAL da API) -> XDocument ROOT, no mesmo dialeto plano que RootTreeBuilder/TclRootBuilder ja produzem em ai/XslSynth. Fica no lado da API (nao em ai/XslSynth.Core) para nao acoplar a classlib compartilhada ao dominio da API - o CLI standalone continua isolado. Tem gate de qualidade (taxa minima de campos com valor) para nao produzir ROOT vazio/lixo que convirja trivialmente. - IXslSynthesizerService/RepairOrchestratorXslSynthesizerService: novo parametro opcional parsedFields, com precedencia sobre o parse de inputXml como XML pronto. - AiTransformationCandidateService/IAiTransformationCandidateService: parsedFields propagado por EnqueueAsync -> RunLoopAsync -> TrySynthesizeXsltAsync -> SynthesizeAsync. - TransformationExecutionController.TryEnqueueAiCandidate: resolve os ParsedFields via parse proprio (ILayoutParserService) antes de disparar o job IA; falha de parse degrada para parsedFields=null (loop legado). - Teste novo usa o LayoutParserService REAL (nao mock) para provar que o ParsedField chega intacto ao synthesizer e que o ParsedFieldRootTreeBuilder monta o XDocument de verdade. Build e testes completos verdes (420 + 59 = 479, sem regressao). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… job fire-and-forget, corrige regressao de latencia sincrona TryEnqueueAiCandidate voltou a nao bloquear a resposta sincrona de execute-candidates: o ParseAsync que monta os ParsedField pro RepairOrchestrator (Issue #140) e o EnqueueAsync agora rodam dentro de um Task.Run disparado sem await, nao mais antes dele. ILayoutParserService e Scoped, entao o job resolve sua propria instancia via IServiceScopeFactory (nao captura o do controller, que morre com o scope da request). Ajustes de teste: TransformationExecutionControllerUserIsolationTests passa a fazer polling apos invocar TryEnqueueAiCandidate via reflection (era sincrono, virou fire-and-forget); FieldMappingsTests e PathwayDiagnosticsTests ganham o novo parametro scopeFactory no construtor do controller.
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
elson-vinicius-lopes
deleted the
feat/xslt-real-via-ollama-repairorchestrator
branch
August 29, 2026 14:06
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
Integra o
RepairOrchestrator(loop de geracao/reparo de XSLT via Ollama) ao runtime comomotor primario de transformacao, substituindo o caminho legado de XML-direto. Fallback
gracioso preservado quando o novo caminho nao for aplicavel.
Commits da cadeia
0c4ccb9feat(ai): integra RepairOrchestrator ao runtime - gera XSLT real via Ollama em vez de XML diretof640cb6docs(architecture): documenta gap de input XML do RepairOrchestrator sem caminho de baixo risco346fa85feat(ai): constroi XML de entrada do RepairOrchestrator a partir do parse posicional real (novo conversorParsedFieldRootTreeBuilder, TXT parseado -> XML ROOT)6239639fix(ai): move ParseAsync do ParsedFieldRootTreeBuilder para dentro do job fire-and-forget, corrige regressao de latencia sincrona (preserva fire-and-forget viaIServiceScopeFactory)Docs de arquitetura relacionados
docs/architecture/gap-real-ollama-geracao-tcl-xsl-2026-08-21.mddocs/architecture/design-integracao-repairorchestrator-runtime-2026-08-21.mddocs/architecture/decisao-pendente-input-xml-repairorchestrator-2026-08-29.mdValidacao
dotnet buildverdedotnet test: 479/479 (59 XslSynth.Core.Tests + 420 LayoutParserApi.Tests)🤖 Generated with Claude Code