Repository navigation
[S2-11] Sugerir cenários de aceitação a partir da história completa - #50
Conversation
…-11) Implementa o PBI-03.1.3 sobre a operação cenarios do harness da S2-09. - Cenários sugeridos passam a ter nome e tipo (caminho_principal, acesso_nao_autorizado ou alternativo). - Histórias que citam rules.permission_terms exigem um cenário de acesso não autorizado; toda resposta exige um caminho principal. - História incompleta responde 400 HISTORIA_INCOMPLETA sem chamar o modelo. - Painel do copiloto ganha o modo "Sugerir cenários"; "Usar no editor" preenche o formulário de cenário para o PO revisar e salvar. - Revisões antigas do harness recebem os termos de permissão padrão.
LoadCG
left a comment
There was a problem hiding this comment.
Revisão QA complementar: os checks de CI estão verdes, mas encontrei duas lacunas que os testes atuais não cobrem. Minha recomendação é ajustar estes pontos e revalidar antes da aprovação.
| "autorizado", | ||
| "autorizada", | ||
| "autorizados", | ||
| "perfil", |
There was a problem hiding this comment.
[P2] perfil sozinho é ambíguo e pode forçar um cenário de acesso não autorizado sem requisito de permissão. Por exemplo, “consultar o perfil público do desenvolvedor” ativa requiresPermissionScenario; o backend então pode rejeitar a resposta ou a IA pode propor uma regra de acesso que não está na história. Sugiro usar expressões mais específicas de autorização ou uma condição configurável, e adicionar um teste para “perfil” usado como dado do domínio.
There was a problem hiding this comment.
Boa, procede. Reproduzi: "consultar o perfil público do desenvolvedor" ativava requiresPermissionScenario.
Corrigido em f9511ae: a lista padrão de permission_terms passou a usar expressões de autorização ("sem permissão", "perfil de acesso", "perfil de administrador", "somente o proprietário", "acesso restrito"...). "Perfil" e "administrador" soltos saíram, porque também aparecem como dado do domínio. A lista continua configurável no harness para quem precisar de outra expressão.
Testes novos: "consultar o perfil público do desenvolvedor", "editar meu perfil" e "cadastrar um administrador do condomínio" não exigem o cenário; "Somente o proprietário pode excluir o pedido", "Usuário sem permissão não visualiza o valor" e "Acesso restrito ao time financeiro" exigem.
| if (!types.has("caminho_principal")) throw Error("Sem caminho principal"); | ||
| if ( | ||
| requiresPermissionScenario(input.fields, config) && | ||
| !types.has("acesso_nao_autorizado") |
There was a problem hiding this comment.
[P2] A validação confere apenas o campo tipo, então uma saída pode marcar como acesso_nao_autorizado um cenário cujo DADO/QUANDO/ENTÃO descreve sucesso. O teste em harness.service.test.ts atualmente passa exatamente esse caso: o helper mantém “o sistema exibe o pedido” no ENTÃO mesmo no cenário de recusa. Assim, o backend pode aceitar uma resposta que não atende ao critério de acesso negado. Sugiro corrigir o fixture e cobrir explicitamente uma saída contraditória; a validação ou o contrato também devem deixar claro o limite do que conseguem garantir.
There was a problem hiding this comment.
Procede também, e o teste estava mesmo validando o caso errado.
Corrigido em f9511ae:
- O helper do teste agora gera um ENTÃO de recusa para
acesso_nao_autorizado. - O backend rejeita um cenário
acesso_nao_autorizadocujo ENTÃO não descreve recusa (recusa, negado, bloqueado, não é permitido, permanece inalterado, mensagem de erro ou de permissão...). Há teste explícito com a saída contraditória ("o sistema exibe o pedido"). - O prompt do ai-service pede que o ENTÃO desse cenário diga explicitamente que a ação é recusada.
Sobre o limite: a verificação é lexical. Ela garante que a recusa está escrita, não que a regra de permissão proposta esteja correta, e a revisão do PO antes de salvar continua necessária. Isso ficou registrado em docs/S2-11-CENARIOS.md (seção "Limites das verificações") e na descrição da operação no OpenAPI.
… não autorizado (S2-11) Atende à revisão do PR #50: - permission_terms padrão passa a usar expressões de autorização ("sem permissão", "perfil de acesso", "somente o proprietário"...); "perfil" e "administrador" soltos aparecem como dado do domínio e não exigem mais o cenário de acesso não autorizado. - Cenário acesso_nao_autorizado precisa descrever a recusa no ENTÃO; saída que marca recusa mas termina em sucesso é rejeitada. - Helper de teste corrigido e casos contraditórios cobertos. - Documentado que as duas verificações são lexicais.
… não autorizado (S2-11) Atende à revisão do PR #50: - permission_terms padrão passa a usar expressões de autorização ("sem permissão", "perfil de acesso", "somente o proprietário"...); "perfil" e "administrador" soltos aparecem como dado do domínio e não exigem mais o cenário de acesso não autorizado. - Cenário acesso_nao_autorizado precisa descrever a recusa no ENTÃO; saída que marca recusa mas termina em sucesso é rejeitada. - Helper de teste corrigido e casos contraditórios cobertos. - Documentado que as duas verificações são lexicais.
6712ac6 to
f9511ae
Compare
Revisão QA complementarRevisei o head atual ( CI, typecheck/build dos três serviços e E2E com PostgreSQL e Chrome estão verdes para este head. O teste integrado do harness indicado na descrição não foi executado localmente por falta de Docker; o job E2E do CI executou a validação dos modos do copiloto com serviços isolados. |
QA adicional — contrato impede perguntas sem cenárioEm Sugiro permitir lista vazia quando houver perguntas, ou ajustar contrato e testes para rejeitar explicitamente esse estado se a decisão de produto for sempre sugerir pelo menos um cenário. O CI usa Ollama simulado; os logs validam o contrato integrado, mas não demonstram a qualidade de cenários produzidos pelo modelo local. A descrição também registra que a captura com modelo local ainda está pendente. |
O que este PR faz
Implementa a S2-11 (card no Trello), que corresponde ao PBI-03.1.3 Sugerir cenários de aceitação. O harness da S2-09 já tinha a operação
cenarios, mas nada a usava. Este PR fortalece essa operação e a liga no painel do copiloto da S2-10.nome,tipo, DADO, QUANDO e ENTÃO, exibidos no painel com o botão Usar no editorcaminho_principale, quando a história ou as regras citam um termo derules.permission_terms, também semacesso_nao_autorizadoHISTORIA_INCOMPLETAcomdetails.campossem chamar o modeloDecisões
permission_termsé uma lista nova emrules, versionada com o resto da configuração do harness. Revisões salvas antes deste PR recebem o padrão do código, sem migration.schema_versioncontinua 1: o schema de saída é gerado pelo backend a cada chamada e nenhum cliente usavacenariosantes.Validação local
npm testcom 352 testes passando, 0 falhas.vitestcom 292 testes passando (novos emCopilotScenarios.test.tsxeapi_copilot.test.ts).test:integration:harnessganhou os passos da S2-11, mas não rodei localmente (sem Docker). O CI deste PR cobre esse script.Pendências
docs/evidence/S2-11-*.png).Detalhes em docs/S2-11-CENARIOS.md.
🤖 Generated with Claude Code