Pular para conteúdo

AUR-546: line_comments sai do parser

Medido antes

  • internal/prompt/templates/review.md nao ensina line_comments: o unico exemplo JSON tem issues como lista de achados, e a palavra so aparecia como parte de inline_comments (configuracao de publicacao). grep -rnw line_comments fora de internal/prompt, specs e tests/e2e/AUR-459.sh so acha o campo legado LineComments de pkg/types.ReviewResult.
  • Nenhum provedor (internal/llm), fixture (tests/fixtures), tutorial (demo/tutoriais, docs/tutorials) ou workflow depende de line_comments. O unico produtor era a fixture do proprio tests/e2e/AUR-459.sh, e tests/acceptance/AUR-459.sh ja estava aposentado (exit 69, AUR-586).
  • adoptLineComments (parser) convertia cada entrada em types.ReviewIssue sem evidence, impact nem verification; o gate de evidencia descartava todas (AUR-541/AUR-542). hasFindingsList aceitava line_comments como lista de achados, entao {"line_comments":[...]} parecia uma resposta valida.
  • O campo pkg/types.ReviewResult.LineComments (fora dos paths do card) continuava sendo preenchido pelo json.Unmarshal, e internal/render e o merge de lotes ainda o liam.

Decisao

line_comments sai do parser. Ensinar o formato com evidencia criaria uma segunda forma de achado ao lado de issues, que e exatamente o defeito do AUR-459 (duas formas, o modelo escolhe a errada). Remover e mais simples e mantem a falha fechada:

  • internal/prompt/parser_line_comments.go foi reescrito: a conversao saiu; discardLineComments limpa result.LineComments e anuncia o descarte em Metadata["parse_discard_warning"], que o CLI ja imprime no stderr.
  • parser_validate.go::hasFindingsList so aceita issues (findingsListKey). Resposta so com line_comments vira erro de validacao missing_issues (revisao inconclusiva), nunca "No issues found.".
  • parser.go::acceptedReviewFields == canonicalReviewFields (sem line_comments); template e parser concordam.
  • tests/e2e/AUR-459.sh aposentado: imprime a justificativa e sai 69 (seletor desconhecido continua 64).
  • Observacao do AUR-543: ReviewChangeScope virou funcao exportada que delega para a var nao exportada reviewChangeScope (seam so dos testes do pacote); aur543_test.go troca a var nao exportada.

Prova

  • AC-001 (bash tests/acceptance/AUR-546.sh AC-001): spec com a decisao, template sem line_comments, nenhum adoptLineComments em internal/, e2e 459 sai 69 citando esta spec e 64 em seletor desconhecido, e os testes TestLineCommentsIsNeitherTaughtNorAccepted, TestReviewTemplateMatchesParser, TestAcceptedReviewFieldsAreConsumed verdes.
  • AC-002 (... AC-002): testes de unidade (resposta so com line_comments, com e sem rule_id, e missing_issues; ao lado de issues nada chega a Issues nem LineComments e o aviso e gravado) e o binario real contra tests/fixtures/repos/git-demo: so line_comments -> exit != 0 com validation_failed, sem "No issues found." nem o achado; misto -> exit 0, sem o achado no stdout, 1 line comment(s) ignored no stderr.
  • MUT-001 (... MUT-001): numa copia, hasFindingsList volta a aceitar line_comments e discardLineComments volta a converter as entradas em achados sem evidencia; compila e AC-002 fica vermelho (TestLineCommentsOnlyReplyIsInconclusive, TestLineCommentsBesideIssuesAreDroppedAndAnnounced).

Execucao real

Container compartilhado (.board/bin/go-shared):

  • bash tests/acceptance/AUR-546.sh AC-001 -> AUR-546/AC-001/pass (rc 0)
  • bash tests/acceptance/AUR-546.sh AC-002 -> AUR-546/AC-002/pass (rc 0)
  • bash tests/acceptance/AUR-546.sh MUT-001 -> --- FAIL: TestLineCommentsOnlyReplyIsInconclusive, --- FAIL: TestLineCommentsBesideIssuesAreDroppedAndAnnounced (e TestAnswerWithoutFindingsListIsInconclusive), depois AUR-546/MUT-001/pass (rc 0: a mutacao compilou e ficou vermelha)
  • bash tests/acceptance/AUR-546.sh bogus -> AUR-546/bogus/unknown-selector (rc 64)
  • bash tests/acceptance/AUR-543.sh AC-001 e AC-002 -> pass (rc 0) com o seam reviewChangeScope nao exportado
  • go vet ./... && go test -p 1 ./... -> rc 0; gofmt -l vazio
  • ./.board/bin/oci-run --profile go-unit-offline-v1 --card AUR-546 -> AUR-546/all/pass, exit_code: 0
  • Tutoriais: run.sh all nos 21 diretorios com a imagem aurum-tutoriais:aur546 (construida desta arvore), todos rc 0, e run.sh --check rc 0 em todos; scripts/docs/capturas.sh regravou docs/assets/capturas (251 imagens).
  • bash tests/acceptance/AUR-542.sh AC-001 -> AUR-542/AC-001/infrastructure/e2e-infra:AUR-459:69 (rc 79), ver pendencia.

Pendencia fora dos paths

tests/acceptance/AUR-542.sh AC-001 fixa tests/e2e/AUR-459.sh como vermelho com a tag gate-open-on-converted-finding e trata exit 69 como infra. Com o e2e aposentado ele passa a sair 79 (e2e-infra:AUR-459:69). O script nao e path deste card; precisa de um card de acompanhamento que tire o AUR-459 da lista red_scripts (o AUR-573 executa o AUR-542 no grupo slow).

Rollback

Reverter os commits do card nos paths internal/prompt, tests/e2e/AUR-459.sh, tests/acceptance/AUR-546.sh e esta spec.