reversa-requirements
Transforma uma ideia em linguagem natural num documento de requisitos completo, ancorado nos artefatos da pipeline reversa. Use quando o usuário digitar "/reversa-requirements", "reversa-requirements"
SKILL.md.claude/skills/reversa-requirements/SKILL.md
GitHubVocê é o redator de requisitos do Reversa. Sua missão é converter o argumento livre passado pelo usuário (frase ou parágrafo descrevendo o objetivo da feature) num requirements.md completo, atravessando o conhecimento já extraído do sistema legado.
Antes de começar
- Leia
.reversa/state.json1.1.output_folder→ pasta da extração reversa (padrão_reversa_sdd) 1.2.forward_folder→ pasta das features forward (padrão_reversa_forward) 1.3.chat_languageedoc_language→ idioma de interação e do documento - A partir daqui, sempre que o texto deste skill mencionar
_reversa_sdd/, troque pelooutput_folderreal - Sempre que mencionar
_reversa_forward/, troque peloforward_folderreal
Verificações Iniciais
- Tente ler
.reversa/hooks.yml1.1. Se o YAML for inválido ou inexistente, prossiga sem ganchos 1.2. Se válido, procure a chavebefore-requirementse filtre entradas comenabled: false - Para cada gancho restante:
2.1. Se
optional: true, apresente como link em "## Ganchos Disponíveis" comlabel,descriptionecommand2.2. Seoptional: false, emita a diretivaEXECUTAR: <comando>e aguarde o resultado antes de prosseguir - NUNCA tente avaliar a chave
conditiondesses ganchos, apenas registre que ela existe e siga em frente
Detecção de feature em andamento
Antes de criar feature nova, verifique se já existe uma anterior em andamento. A detecção é baseada em artefatos físicos da feature, não em campos auto-declarados, porque é resistente a skills que esquecem de atualizar metadados.
Tente ler
.reversa/active-requirements.json1.1. Se o arquivo não existir, NÃO há feature em andamento, pule esta seção e siga direto para "Resolução do diretório da feature" 1.2. Se o JSON estiver inválido ou corrompido, trate como ausente, registre o problema em nota interna e siga adianteLeia o campo
feature-dirdo JSON 2.1. Sefeature-dirnão estiver presente ou apontar para pasta que não existe, trate como ausente, prossiga normalmenteIdentifique o estágio físico atual olhando os artefatos dentro de
feature-dir:Condição observada Estágio físico requirements.mdausentevaziorequirements.mdpresente,roadmap.mdausenterequirementsroadmap.mdpresente,actions.mdausenteplanactions.mdpresente com pelo menos uma linha| ... | \[ \] |(checkbox aberto)coding-em-progressoactions.mdpresente, TODAS as linhas de ação como| ... | \[X\] |(checkboxes fechados)doneConsidere a feature anterior em andamento quando o estágio físico for QUALQUER valor diferente de
doneevazio. Ou seja: 4.1.requirements,planoucoding-em-progresso→ em andamento 4.2.done→ concluída, trate como ausente, sobrescreva ao criar nova 4.3.vazio→ corrupção,feature-direxiste mas semrequirements.md, trate como ausenteSe for em andamento, registre internamente para uso na próxima seção: 5.1. Identificador da feature, no formato
<NNN>-<short-name>derivado defeature-dir(basename) 5.2. Estágio físico detectado, valor entrerequirements,plan,coding-em-progresso5.3. Paracoding-em-progresso, conte quantas ações[X]versus quantas[ ]emactions.md, isso ajuda o usuário a decidirPara a contagem de checkboxes em
actions.md, considere apenas linhas de tabela que terminam com\| [ ] \|ou\| [X] \|. Cabeçalhos e linhas de texto livre são ignorados.
A política de o que fazer quando há feature em andamento está descrita na próxima seção "Política de re-execução".
Política de re-execução
Se a detecção identificou feature anterior em andamento (estágio físico em requirements, plan ou coding-em-progresso), pergunte sempre ao usuário antes de qualquer escrita. Não há default automático, o objetivo é eliminar surpresa.
Apresente o bloco abaixo ao usuário:
Já existe uma feature em andamento:
- Identificador:
<NNN>-<short-name>- Estágio detectado:
<estágio físico>- Progresso (apenas para
coding-em-progresso):<N>de<M>ações concluídasComo você quer proceder?
1. Continuar a anterior, vou abortar este
/reversa-requirementse você retoma a feature em curso. 2. Criar nova em paralelo, a feature anterior fica pausada num campopaused-featurese a nova vira ativa. 3. Abandonar a anterior, a pasta antiga fica em disco intocada masactive-requirements.jsonvai apontar pra nova.Digite 1, 2 ou 3.
Aguarde a resposta. NÃO escolha por conta própria, NÃO interprete silêncio como confirmação de qualquer opção.
Opção 1, continuar a anterior
- Não escreva em
active-requirements.json - Não crie pasta nova em
_reversa_forward/ - Sugira ao usuário o próximo skill apropriado para o estágio físico:
3.1.
requirements→/reversa-clarify(se houver marcadores[DÚVIDA]norequirements.md) ou/reversa-plan3.2.plan→/reversa-to-do3.3.coding-em-progresso→/reversa-coding(pode receber argumento livre restringindo escopo, ex.: "T010-T015") - Encerre este skill com mensagem clara informando que nada foi escrito, NÃO execute as próximas seções
Opção 2, criar nova em paralelo
- Leia o
active-requirements.jsonatual e o campopaused-features1.1. Se o campo não existir, considerepaused-features: [] - Construa entrada de pausa para a feature anterior, copiando os campos do
active-requirements.jsonatual e acrescentando os dois campos de pausa:
{
"feature-dir": "<feature-dir relativo>",
"feature-id": "<NNN>",
"short-name": "<short-name>",
"started-at": "<ISO 8601 do active-requirements.json atual>",
"current-stage": "<valor atual do campo, mesmo sendo metadado informativo>",
"stages-completed": [],
"paused-at": "<ISO 8601 da hora atual>",
"paused-from-stage": "<estágio físico detectado: requirements | plan | coding-em-progresso>"
}
2.1. Os campos started-at, current-stage e stages-completed permitem que /reversa-resume retome essa feature depois sem perder dados originais
3. Adicione essa entrada ao final do array paused-features (push, ordem cronológica)
4. Siga normalmente para "Resolução do diretório da feature". Ao escrever o active-requirements.json novo (passo 5 daquela seção), INCLUA o array paused-features atualizado no JSON
Opção 3, abandonar a anterior
- Leia o
active-requirements.jsonatual e o campopaused-features1.1. Se o campo não existir, considerepaused-features: [] - NÃO adicione a feature recém-abandonada ao array
paused-features(ela fica órfã na pasta_reversa_forward/, sem registro ativo, recuperável apenas por listagem manual) - Siga normalmente. Ao escrever o
active-requirements.jsonnovo, preserve o arraypaused-featuresherdado do JSON anterior (sem adicionar a abandonada)
A diretriz non-destructive vale aqui: em nenhuma das três opções a pasta da feature anterior em _reversa_forward/ é apagada ou modificada. Apenas o active-requirements.json (gerenciado pelo Reversa) é reescrito.
Resolução do diretório da feature
- Leia
.reversa/setup.json1.1. Seprefix-formatestiver ausente ou forsequencial, calcule o próximoNNNlistando subpastas de_reversa_forward/no formatoNNN-*e somando 1 ao maior 1.2. Seprefix-formatfortimestamp, useYYYYMMDD-HHMMSSda hora corrente - Gere um
short-nameem kebab-case ASCII a partir do argumento livre, máximo trinta caracteres - Defina
feature-dir = _reversa_forward/<NNN>-<short-name>(ou_reversa_forward/<TIMESTAMP>-<short-name>) - Crie
feature-dirse não existir - Atualize
.reversa/active-requirements.jsoncom o conteúdo abaixo, usando escrita atômica (tempfile mais rename):
{
"schema-version": 1,
"feature-dir": "<caminho relativo do projeto>",
"feature-id": "<NNN>",
"short-name": "<short>",
"started-at": "<ISO 8601>",
"current-stage": "requirements",
"stages-completed": [],
"paused-features": [...]
}
5.1. O campo paused-features vem do array atualizado conforme a opção escolhida em "Política de re-execução" (vazio se foi a primeira feature do projeto)
5.2. Os campos current-stage e stages-completed são metadado informativo, não autoritativo, a detecção real do estágio é feita por artefatos físicos
Política de re-execução: se active-requirements.json já apontar para uma feature anterior, pergunte ao usuário antes de sobrescrever. Opções: continuar a anterior, criar nova feature em paralelo, ou abandonar a anterior.
Coleta de contexto a partir da extração reversa
Antes de escrever o requirements, leia, na ordem (pulando o que não existir):
_reversa_sdd/architecture.md(panorama dos componentes)_reversa_sdd/domain.md(regras de negócio confirmadas)_reversa_sdd/inventory.md(superfície do código)_reversa_sdd/code-analysis.mdSOMENTE nas seções dos componentes que o argumento livre parece tocar.reversa/principles.md(princípios do projeto, se existir)
Identifique os arquivos relevantes. Cada citação dentro do requirements precisa apontar para essas fontes no formato _reversa_sdd/<arquivo>#<seção>.
Construção do requirements.md
- Carregue o template em
.reversa/templates/requirements-template.md - Preserve a ordem das seções obrigatórias
- Preencha cada seção respeitando o comentário inline orientador
- Marque com
[DÚVIDA]qualquer ponto onde a informação faltar ou for ambígua - Limite o número total de marcadores
[DÚVIDA]a no máximo três no documento inicial 5.1. Priorize, em ordem: escopo, segurança e privacidade, experiência do usuário, técnico - Use a marcação 🟢 / 🟡 / 🔴 nos itens conforme a confidência da fonte original
Auto-validação iterativa
- Após escrever o
requirements.md, leia o templatequality-template.md - Aplique mentalmente a checklist
- Se houver itens reprovados, reescreva as seções afetadas
- Repita esse ciclo no máximo três vezes
- Persistindo problemas após três iterações, registre-os em uma seção final
## Pendências de Qualidadee siga em frente
Persistência
- Grave
requirements.mdemfeature-dir/ - A escrita deve ser atômica (tempfile mais rename)
- Use UTF-8 sem BOM
Ganchos Pós-execução
- Procure
after-requirementsem.reversa/hooks.yml - Aplique a mesma regra de filtragem (
enabled: falseé descartado) - Para
optional: true, apresente links em "## Ganchos Disponíveis" - Para
optional: false, emitaEXECUTAR: <comando>e aguarde
Relatório final
No final da execução, mostre ao usuário:
- Caminho absoluto de
feature-dir - Caminho absoluto de
requirements.md - Número de marcadores
[DÚVIDA]no documento - Sugestão de próximo passo:
4.1. Se houver
[DÚVIDA], sugerir/reversa-clarify4.2. Caso contrário, sugerir/reversa-plan
Termine sempre com:
Digite CONTINUAR para prosseguir com
/reversa-clarifyou/reversa-planconforme a sugestão acima.
NUNCA prossiga automaticamente para o próximo comando, deixe a decisão com o usuário.