Skip to content

fix(qa-gate): add mandatory story status update after gate verdict#543

Open
vxavierr wants to merge 1 commit intoSynkraAI:mainfrom
vxavierr:fix/qa-gate-mandatory-status-update
Open

fix(qa-gate): add mandatory story status update after gate verdict#543
vxavierr wants to merge 1 commit intoSynkraAI:mainfrom
vxavierr:fix/qa-gate-mandatory-status-update

Conversation

@vxavierr
Copy link

@vxavierr vxavierr commented Mar 2, 2026

Problema

O @qa cria o gate file mas não atualiza o campo Status da story — que fica preso em InReview (ou Ready for Review). Qualquer agente ou pessoa que consulte a story lê um estado incorreto: o gate file e o campo da story estão dessincronizados.

Raiz dupla:

  1. qa-gate.md não tinha nenhuma instrução explícita para atualizar o Status da story após emitir o veredicto
  2. story-lifecycle.md atribuía a transição para Done ao @devops, o que está incorreto — o @devops executa o git push, não atualiza o campo de status

Mudanças

qa-gate.md

Adiciona a seção ## MANDATORY FINAL STEP — Update Story Status com:

  • Tabela de mapeamento veredicto → Status (PASS/CONCERNS/WAIVED → Done, FAIL → InProgress)
  • Formato obrigatório de entrada no Change Log
  • Definição explícita: gate file sem atualização de status = execução incompleta da task

story-lifecycle.md

  • Substitui a linha Done (incorretamente atribuída ao @devops) por duas linhas explícitas de responsabilidade do @qa:
    • PASS/CONCERNS/WAIVED → Done@qa MUST update
    • FAIL → InProgress@qa MUST update
  • Adiciona bloco CRITICAL (espelhando o que já existe para a transição Draft → Ready) tornando a responsabilidade do @qa inequívoca
  • Esclarece que o @devops só executa o git push depois que a story já está Done

Por que isso importa

Sem esse fix, qualquer consulta de status — incluindo @aios-master *list-stories — lê dado stale. Uma story pode ter um gate PASS e continuar aparecendo como InReview, fazendo agentes tratarem trabalho concluído como pendente.

Problem identified: @qa creates the gate file but leaves the story in
InReview (or Ready for Review) — creating a stale Status field that any
agent or human consulting the story will read as incorrect state.

Dual root cause:
- qa-gate.md had no explicit instruction to update the story Status field
- story-lifecycle.md assigned the Done transition to @devops, which is
  incorrect — @devops handles git push, not the status field update

Changes:
- qa-gate.md: add MANDATORY FINAL STEP section with verdict→Status mapping
  table and required Change Log entry format. Gate file without status update
  is now defined as incomplete task execution.
- story-lifecycle.md: replace single Done row (attributed to @devops) with
  two explicit rows owned by @qa:
    PASS/CONCERNS/WAIVED → Done     (@qa MUST update)
    FAIL → InProgress               (@qa MUST update)
  Add CRITICAL block mirroring the existing Draft→Ready critical note,
  making @qa's responsibility unambiguous.
@vercel
Copy link

vercel bot commented Mar 2, 2026

@vxavierr is attempting to deploy a commit to the Pedro Valério Lopez's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai
Copy link

coderabbitai bot commented Mar 2, 2026

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

📥 Commits

Reviewing files that changed from the base of the PR and between 41aa9a9 and 931b555.

📒 Files selected for processing (2)
  • .aios-core/development/tasks/qa-gate.md
  • .claude/rules/story-lifecycle.md
 _________________________________________
< Code review: now with 100% more rabbit. >
 -----------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ

✏️ Tip: You can disable in-progress messages and the fortune message in your review settings.

Tip

CodeRabbit can scan for known vulnerabilities in your dependencies using OSV Scanner.

OSV Scanner will automatically detect and report security vulnerabilities in your project's dependencies. No additional configuration is required.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@vxavierr
Copy link
Author

vxavierr commented Mar 2, 2026

Fechando para revisão interna antes de resubmeter.

@vxavierr vxavierr closed this Mar 2, 2026
@vxavierr vxavierr reopened this Mar 2, 2026
Copy link
Contributor

@nikolasdehor nikolasdehor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review — PR #543: mandatory story status update after gate verdict

@vxavierr, fix bem fundamentado. O problema é real — um gate file sem atualização de status cria dado stale que propaga para qualquer consulta downstream (*list-stories, decisões de sprint, etc.).

Análise das mudanças

1. qa-gate.md — seção MANDATORY FINAL STEP

A tabela de mapeamento veredicto → status está correta:

Veredicto Status Correto?
PASS Done Sim — story concluída
CONCERNS Done Sim — concerns são observações, não blockers
FAIL InProgress Sim — retorna para dev corrigir
WAIVED Done Sim — waiver aceita o risco, story avança

O formato do Change Log entry é claro e auditável:

| {YYYY-MM-DD} | @qa (Quinn) | Gate: {verdict} — Status: {old} → {new} |

A definição "gate file sem atualização de status = execução incompleta" é a instrução certa — torna o comportamento mandatório, não opcional.

2. story-lifecycle.md — correção de responsabilidade

A correção de @devops para @qa na transição InReview → Done está factualmente correta. O @devops executa git push depois que a story já está Done — ele não é quem muda o status. O bloco CRITICAL adicionado espelha o padrão já existente para a transição Draft → Ready do @po, mantendo consistência.

A adição da linha InProgress (return) para FAIL é importante — sem ela, a transição reversa não estava documentada, e o LLM não teria instrução explícita para regredir o status.

Dois pontos menores

1. CONCERNS → Done merece uma nota

CONCERNS mapeando para Done é correto no contexto atual (concerns são informativos, não blockers). Mas vale considerar se no futuro haverá um status intermediário tipo Done (with concerns) para distinguir de um PASS limpo. Não é blocker para este PR — apenas mencionando para rastreabilidade.

2. Edge case: gate file já existe (re-execução)

Se o @qa executar *qa-gate duas vezes na mesma story (corrigindo um gate anterior), a instrução "append to Change Log" está correta (não substitui). Mas seria útil documentar explicitamente que o Status deve refletir o último veredicto, não o primeiro. Na prática o comportamento já é correto (a última escrita no campo Status ganha), mas uma nota explícita previne ambiguidade em cenários de re-execução.

Veredicto

Fix correto, bem delimitado, e resolve um problema real de consistência de dados. Ambas as mudanças estão alinhadas e se reforçam mutuamente. LGTM.

APPROVE

@Pedrovaleriolopez
Copy link
Contributor

DevOps Review — @devops (Gage)

Veredicto: APPROVED — Ready to merge quando reaberto

  • Fix correto e bem delimitado — resolve dessincronização real entre gate file e story status
  • Mapeamento veredicto→Status factualmente correto
  • Human review: @nikolasdehor APPROVED
  • CodeRabbit: SUCCESS

Bloqueador: Autor comentou "Fechando para revisão interna" — aguardando resubmissão. Merge imediato quando pronto.

Gage — Repository Guardian

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.

3 participants