feat: contrato aditivo de linha vazia/degradacao posicional + fases de progresso - #198
Conversation
…ploaded/parsing client-side, transforming/completed/failed no backend) Estende LowCodeTransformationIndexEntry com o vocabulario completo de fases do contrato aditivo (docs/architecture/contrato-linha-vazia-progresso-e-degradacao-posicional-2026-08-27.md Sec.2): uploaded/layout_selected/parsing documentados como client-side only (o ticket so existe apos o parse), TransformingStatus como alias de ProcessingStatus (mesmo valor de fio, nao quebra consumidor) e novo FailedStatus quando nenhum candidato do conjunto teve sucesso.
…ignmentFailed) Implementa o contrato aditivo desenhado por @lp-architect (docs/architecture/contrato-linha-vazia-progresso-e-degradacao-posicional-2026-08-27.md): - LineInfo.IsDeclaredEmpty: true quando a linha foi identificada no layout mas o conteudo bruto e vazio/whitespace. Populado em ParseTextWithSequenceValidation, que agora tambem preenche ParsingResult.LineInfos. - LineInfo.PositionalAlignmentFailed: sinal observacional de colapso posicional (>=2 campos consecutivos da mesma ocorrencia com o mesmo Start), sintoma do tipo LINHA006. Deteccao pos-loop em ParseLineFields, sem alterar o calculo de posicao existente. Nota de reconciliacao (2026-08-27, @lp-devops): o commit original desta feature tambem reimplementava o Bug A/B de InformacoesParaEDI (Length de fragmento bruto + OccurrenceCount/IsAggregatedOccurrence), sem saber que o PR #191 (a330af2, mesclado em develop antes desta branch ser criada) ja havia corrigido o mesmo bug. Ao reconciliar esta branch com origin/develop atualizado, a duplicacao foi removida — Models/Entities/ParsedField.cs ficou byte-identico ao de origin/develop apos a resolucao de conflito, confirmando que nao sobrou logica divergente. Only os dois campos genuinamente novos de LineInfo permanecem aqui. Todos os campos sao aditivos - nenhum Status/comportamento existente foi alterado. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
…08-27) Documenta IsDeclaredEmpty, PositionalAlignmentFailed e a nova fase "failed" de transformationsStatus no README (bilingue) e via XML docs em ParsingResult.LineInfos, sinalizando o gap conhecido: os dois booleanos de LineInfo sao populados internamente mas ainda nao sao serializados no payload de POST /api/parse/upload. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
O POST /api/parse/upload nunca incluía LineInfos (IsDeclaredEmpty, PositionalAlignmentFailed), deixando os sinais aditivos da PR #198 inacessíveis ao front-end. Campo lineInfos adicionado ao objeto de resposta, sem alterar nenhum campo existente. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…inha) Documenta veredito PASS, achado de design em IsDeclaredEmpty (inalcancavel na pratica dado o matcher atual) e o incidente de commits concorrentes que absorveu os testes de QA em commits de outro agente no mesmo checkout. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
O calculo original (IsNullOrWhiteSpace sobre currentLine inteira) era inalcancavel: todo matcher de IsLineValidForConfig exige um prefixo nao-espaco (Sequencia/HEADER/EDI_/999999) para casar a linha, entao uma linha identificada nunca podia ser 100% whitespace. ParseLineFields agora expoe allDataFieldsBlank (true quando todos os campos de dado, ja excluindo Sequencia/LINHA*, sao whitespace; cai no fallback antigo sobre a linha bruta se nao houver campo de dado). O sinal aditivo passa a refletir a intencao original do contrato: "os dados da linha estao vazios", nao "a linha inteira esta em branco". Ajusta o teste de regressao do QA que documentava o bug para agora provar o comportamento corrigido.
Atualização — 4 commits novos desde a criação do PRTrabalho adicional de 3 agentes em cima da branch, agora pushado:
Estado final
Tecnicamente completo e pronto para revisão humana. Aguardando aprovação do dono para merge — não farei merge por conta própria. |
|
…nsercoes no PR #198 (falso positivo por deslocamento, sem codigo novo)
Summary
LineInfo.IsDeclaredEmpty/LineInfo.PositionalAlignmentFailed: sinais aditivos de linha (linha vazia declarada no layout, colapso posicional tipo LINHA006).ParsingResult.LineInfospassa a ser populado (antes nunca era).uploaded/parsing(client-side),transforming/completed/failed(backend).Closes #194, #195, #197 (issue #196 fica de fora — bug ainda bloqueado por correlationId, nao faz parte deste escopo).
Nota de reconciliacao (importante para revisao)
A
developlocal usada durante a implementacao estava ~20 commits atras deorigin/develop,incluindo o PR #191 (
a330af2) que ja corrigia o Bug A/B deInformacoesParaEDI(
ParsedField.Length/OccurrenceCount/IsAggregatedOccurrence). O@lp-parser-llmreimplementou o mesmo bug do zero sem saber disso.
Ao reconciliar esta branch a partir de
origin/developatualizado (cherry-pick dos 2 commitslocais), a duplicacao foi resolvida:
Models/Entities/ParsedField.csficou byte-identicoao de
origin/developapos a resolucao de conflito — confirmando que nenhuma logica divergentesobrou. Restaram apenas os 2 campos genuinamente novos de
LineInfo(+ o fix deParsingResult.LineInfosnunca populado).Test plan
dotnet build— 0 erros (625 warnings pre-existentes, nenhum novo)dotnet test— 378/382 (as 4 falhas sao pre-existentes/nao relacionadas:SafePathResolverTestse
LowCodeRunnerArgsTestsfalham por diferenca de path Windows x Linux no ambiente de CI atual)PositionalFormatRegressionTests— 4/4 passando isoladamenteObservacoes para revisao humana
Services/Transformation/LowCode/) nao teve conflito com oreconciliado acima — areas de codigo distintas, sem sobreposicao.
LineInforefletefielmente a intencao original do
@lp-parser-llm— o escopo foi reduzido, nao a autoria.🤖 Generated with Claude Code