AUR-532 — Ciclo de realimentação melhora a política a partir do uso real
Medido antes (por leitura)
- Não havia pacote nem comando de realimentação. Os dados já existiam: o
review publica a auditoria (
aurumcode-audit-<pr>, AUR-521) e o SARIF como artefatos do workflow; alertas de code scanning ficam no GitHub com o motivo da dispensa; exceções e skills vivem no repositório da política. - O corpus do AUR-523 (
tests/benchmark) mede recall, precisão e "aprovado com defeito" e gravaout/multilang-report.jsoncom-update-aur523; o pacote é só leitura para este card. selectProvider()já resolve o modelo (inclusiveAURUMCODE_LLM_FIXTURE).
Decisão
internal/feedback(arquivo por responsabilidade):signal.go(sinal, id estável de tipo+repo+id da fonte, redação de todo texto na construção),alerts.go(só false positive vira falso positivo; won't fix e used in tests não são sinal),audit.go(achado bloqueante que some entre auditorias consecutivas da mesma PR, com a linha reescrita pelo diffcompare, vira verdadeiro positivo),lost.go(/aurum perdeu [<sha>] <descrição>só de OWNER/MEMBER/COLLABORATOR; sem SHA vale o head da PR; issue sem SHA é recusada; caso candidato por sinal),ledger.go(estado emrealimentacao/sinais.jsonno repositório da política),propose.go(modelo agrupa; JSON estrito; descarta proposta sem sinal, com sinal desconhecido ou skill não declarada),skills.go(substitui ou acrescenta a seção## <secao>),measure.go(antes/depois; "não medido" explícito; regressão destacada),plan.go(arquivos e corpo da PR),github.go,source_github.go,publish.go(REST mínimo; URL absoluta só no host da API, para o token não sair),run.go(orquestração).- PR única: branch fixa
aurum/realimentacao; com PR aberta, a rodada grava na mesma branch e atualiza o corpo (PATCH), nunca abre outra. Sem sinal novo (registro da base e da branch), nada é gravado. - Escrita pela API de conteúdo com o token do workflow; nenhuma identidade git
é configurada ou inventada. Leitura com
AURUMCODE_SIGNALS_TOKEN, escrita comGITHUB_TOKEN. - Medição (AC-005):
--medircompara dois relatórios do AUR-523; o workflow reutilizávelrealimentacao-medicao.ymlroda o harness na base e na PR do repositório da política (corpus emcorpus/cases, política em.aurumcode/), comenta a tabela e falha em regressão ou lado não medido. cmd/aurumcode/cmd_feedback.go: subcomandorealimentacaono registro AUR-572.
Fora dos paths do card (necessário ao Outcome)
docs/index.md (link da seção nova, regra do AUR-560), docs/architecture.md
(linha de internal/feedback, exigida por TestAUR558ArchitectureDoc...),
CHANGELOG.md (entrada em Unreleased, exigida pelo AUR-509),
scripts/ci/realimentacao.sh e scripts/ci/realimentacao-medir.sh (semgrep
proíbe sh -c em workflow), cmd/aurumcode/aur572_test.go (lista de
comandos).
Varredura de documentação desatualizada
grep -ri "realimenta\|feedback\|perdeu" em docs/, README.md,
demo/tutoriais, docs/tutorials: nenhuma menção anterior a corrigir.
Como cada cenário é provado
- AC-001:
TestAUR532AC001DismissedFalsePositiveIsASignal. - AC-002:
TestAUR532AC002FixedFindingIsATruePositive. - AC-003:
TestAUR532AC003LostCommandIsAnEscapedDefect. - AC-004:
TestAUR532AC004ProposalWithoutSignalIsDiscardedeTestAUR532AC004AC006SinglePullRequestAndIdempotentRerun(GitHub fake emhttptest: uma PR; rodada nova com sinal novo atualiza a mesma PR). - AC-005:
TestAUR532AC005MeasurementHighlightsRegressioneTestAUR532AC005MeasureCommand. - AC-006:
TestAUR532AC006RerunWithoutNewSignalsPlansNothinge o teste ponta a ponta (segunda rodada: zero gravações, zero PR). - AC-007:
TestAUR532AC007SignalsAreRedacted(canário registrado e canário com forma de token, ambos montados em tempo de execução, ausentes do prompt, do corpo e dos arquivos da PR). - MUT-001:
tests/acceptance/AUR-532.sh MUT-001grava o falso positivo como verdadeiro positivo; AC-001 fica vermelho.
Limites
- Exceção aprovada (citada no Outcome) não virou sinal nesta entrega: o registro de exceções aplicadas está na auditoria, mas sem marca temporal de aprovação; fica para um card seguinte.
- A medição depende de o repositório da política manter o corpus no layout do
AUR-523 e de o harness aceitar esse corpus (as asserções de
TestAUR523ReportPerLanguage, como ≥ 6 linguagens, valem para ele). - Artefatos expirados (retenção do GitHub) deixam de produzir sinais de verdadeiro positivo; a coleta é limitada em páginas e artefatos por rodada.
- Ao atualizar uma PR aberta, o corpo passa a descrever a rodada atual; as anteriores ficam nos commits da branch.
- Revisão estática do coordenador (2026-10-07): PR fechada (rejeitada) tem os
sinais lidos do registro no head dela e não é reproposta; sem PR aberta a
branch é recriada da base;
POLICY_TOKENopcional abre a PR com outra identidade (disparapull_request); sem ele, a medição é disparada porworkflow_dispatch(o único evento que ogithub.tokendispara) e a org precisa permitir que o Actions abra PRs. A medição usa o provedor falso do AUR-523 e a tabela e o corpo da PR dizem isso.Pullspagina pelolist(Link next), como todas as listagens.