Skip to content

feat(suggestions): ciclo humano de sugestoes da IA e proveniencia por… - #45

Merged
vitorpdim merged 3 commits into
mainfrom
feature/s2-13-suggestions-provenance
Oct 10, 2026
Merged

vitorpdim merged 3 commits into
mainfrom
feature/s2-13-suggestions-provenance

Conversation

@vitorpdim

Copy link
Copy Markdown
Contributor

O que foi feito?

Implementado o ciclo humano de sugestões da IA com proveniência por campo e fallback manual (S2-13), cobrindo PBI-03.2.1/03.2.2/03.2.3.

Alterações técnicas

  • Migration 014: provenance_json em epico/feature/pbi + tabela sugestao_ia (índice único parcial para idempotência de proposta).
  • Backend (modules/suggestions, modules/provenance): máquina de estados pendente → aceita/editada/descartada, idempotente na resolução (mesmo resultado = no-op 200, resultado diferente = 409 via FOR UPDATE). Reaproveita os guardas existentes de arquivamento e justificativa de item concluído. A IA nunca escreve nas tabelas de negócio — só o backend Node grava, após aceite/edição explícitos.
  • markFieldsHumanAuthored integrado em epics/features/pbis.repository.ts: toda edição manual marca os campos como human-authored, sobrescrevendo proveniência anterior — o fluxo manual segue 100% funcional com a IA desligada.
  • docs/api/openapi.yaml: 15 novas rotas documentadas (list/create/accept/edit/discard × epic/feature/pbi); ci.yml com os dois novos testes de banco.
  • Frontend: api_suggestions.ts, SuggestionsPanel (aceitar/editar/descartar com estado visual distinto, usando o componente AISuggestion do design system que já existia mas estava sem uso) e ProvenanceBadge inline nos campos sugeríveis de épicos, features e PBIs.

Como validar

  • Backend: npm test (289/289) e com Postgres real ARCHIVE_TEST_DATABASE_URL/BACKLOG_TREE_TEST_DATABASE_URL setados (353/354, 1 skip é de outro teste não relacionado) — inclui suggestions.db.test.ts e migration-014.db.test.ts cobrindo corrida de arquivamento, política de justificativa e isolamento entre entidades.
  • npx tsc --noEmit, npm run audit:security (0 vulnerabilidades) e openapi.contract.test.ts — todos limpos.
  • Frontend: npx tsc -b, npm test (209/209), npm run build — todos limpos.

A ser feito (checklist)

  • Verificação manual em navegador (a cobertura ficou nos testes de componente + build, no mesmo padrão já usado para o DecisionsPanel).
  • Revisar se querem um e2e/tests/suggestions.e2e.mjs dedicado (o DecisionsPanel, que é o precedente mais próximo, também não tem um).

cc @LoadCG

Também notei uma pasta API-4/ não rastreada na raiz do repo, já presente antes desta sessão - não toquei nela, mas pode valer uma limpeza.

… campo (S2-13)

Introduz o modulo de sugestoes (sugestao_ia) com maquina de estados
pendente -> aceita/editada/descartada, idempotente tanto na proposta
(upsert via indice unico parcial) quanto na resolucao (FOR UPDATE +
mesmo resultado = no-op, resultado diferente = 409). Nenhum campo do
item muda sem aceite/edicao explicita, e a IA nunca escreve direto nas
tabelas de negocio - so o backend Node grava, reaproveitando os guardas
de arquivamento e justificativa de item concluido ja existentes.

Adiciona provenance_json em epico/feature/pbi para rastrear a origem de
cada campo (human-authored por omissao, ai-accepted, ai-edited),
atualizado tanto pelo ciclo de sugestoes quanto pela edicao manual via
epics/features/pbis.repository (markFieldsHumanAuthored), garantindo que
o cadastro manual continue funcionando integralmente com a IA desligada.

Backend: migration 014, modulos provenance/ e suggestions/ (types,
repository, service, routes, fakes) com testes de unidade e de
integracao real no Postgres; openapi.yaml documentado para as 15 novas
rotas; CI atualizado com os novos testes de banco.

Frontend: api_suggestions.ts, SuggestionsPanel (aceitar/editar/descartar
com estado visual distinto, usando o componente AISuggestion do design
system) e ProvenanceBadge inline nos campos sugeriveis de epicos,
features e PBIs.
package-lock.json tinha proxy-addr@2.0.7 fixado (dependencia transitiva
do express), dentro da faixa vulneravel 1.1.0-2.0.7 de IP spoofing via
subnet IPv6 mapeado para IPv4. npm audit fix resolveu sem mudanca major,
0 vulnerabilidades. Build e suite completa (309/309) seguem passando.
…ions-provenance

# Conflicts:
#	.github/workflows/ci.yml
#	backend/src/index.ts
#	backend/src/modules/epics/epics.repository.ts
#	backend/src/modules/features/features.repository.ts
#	backend/src/modules/pbis/pbis.repository.ts
#	frontend/src/views/backlog/EpicsView.tsx
#	frontend/src/views/backlog/FeaturesView.tsx
#	frontend/src/views/backlog/PbisView.tsx
@vitorpdim
vitorpdim merged commit 199fd34 into main Oct 10, 2026
5 checks passed
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