| name | reversa-resume |
| description | Retoma uma feature pausada (listada em paused-features de active-requirements.json) e a torna ativa. Use quando o usuário digitar "/reversa-resume", "reversa-resume", "retomar feature pausada" ou pedir para voltar a uma feature anterior. NÃO cria features novas, apenas troca a ativa pela escolhida e (quando faz sentido) move a ativa atual para paused-features. |
| license | MIT |
| compatibility | Claude Code, Codex, Cursor, Gemini CLI e demais agentes compatíveis com Agent Skills. |
| metadata | {"author":"sandeco","version":"1.0.0","framework":"reversa","phase":"forward","stage":"resume"} |
Você é o retomador. Sua missão é trocar a feature ativa por uma das que estão em paused-features, sem perder o trabalho de nenhuma das duas.
Antes de começar
- Leia
.reversa/state.json para resolver output_folder e forward_folder
- Use os valores reais nos lugares onde o texto mencionar
_reversa_sdd/ ou _reversa_forward/
Verificações Iniciais
-
Leia .reversa/active-requirements.json
1.1. Se ausente, aborte com mensagem:
> 🛑 `/reversa-resume` exige uma feature ativa para fazer a troca. `active-requirements.json` não existe.
>
> Use `/reversa-requirements` para criar a primeira feature do projeto.
-
Verifique o campo paused-features
2.1. Se ausente ou array vazio, aborte com mensagem:
> 🛑 Não há features pausadas para retomar. O array `paused-features` está vazio.
>
> Features ficam pausadas quando você roda `/reversa-requirements` numa feature ativa em andamento e escolhe a opção 2 (criar paralela).
-
Aplique ganchos before-resume da forma padrão (lê .reversa/hooks.yml, filtra enabled: false, mesma lógica de outros skills do ciclo forward)
Listagem das pausadas
Para cada entrada em paused-features:
-
Verifique se o feature-dir ainda existe em disco
1.1. Se NÃO existir, marque como ausente (a pasta foi apagada manualmente, a entry virou lixo)
-
Se existir, detecte o estágio físico atual com a mesma lógica do /reversa-requirements:
Condição observada em feature-dir | Estágio físico |
|---|
requirements.md ausente | vazio |
requirements.md presente, roadmap.md ausente | requirements |
roadmap.md presente, actions.md ausente | plan |
actions.md presente com pelo menos uma linha | ... | \[ \] | | coding-em-progresso |
actions.md presente, todas as ações como | ... | \[X\] | | done |
-
Para coding-em-progresso, conte ações [X] versus [ ]
Apresente lista numerada ao usuário:
Features pausadas:
1. <NNN-short-name> · estágio: <físico> · pausada em <YYYY-MM-DD> [· N de M ações]
2. <NNN-short-name> · estágio: <físico> · pausada em <YYYY-MM-DD>
3. <NNN-short-name> · estágio: ausente · pausada em <YYYY-MM-DD> (pasta apagada, entry orfã)
Para entries ausente, marque visualmente que estão órfãs.
Escolha do usuário
Pergunte:
Qual feature você quer retomar? Digite o número da lista, ou 0 para cancelar.
Aguarde a resposta. NÃO escolha por conta própria.
Tratamento de entry órfã
Se o usuário escolheu uma entry com estágio ausente:
- NÃO faça swap
- Pergunte: "A pasta dessa feature foi apagada. Quer remover essa entry de
paused-features? (sim / não)"
- Se sim, remova só essa entry do array, escreva
active-requirements.json atualizado (atomicamente), encerre o skill.
- Se não, encerre sem mudar nada.
Detecção do estado da feature atualmente ativa
Para a feature em active-requirements.json#feature-dir, detecte o estágio físico usando a mesma tabela acima. Esse valor decide se ela vai ser pausada ou descartada na troca.
Swap
- Construa a nova entrada de pausa para a feature atualmente ativa, copiando todos os campos do
active-requirements.json exceto paused-features, e adicionando:
paused-at: ISO 8601 da hora atual
paused-from-stage: estágio físico detectado da ativa atual
- Decida o destino da feature ativa atual:
- 2.1. Se estágio físico for
requirements, plan ou coding-em-progresso: pause, ou seja, faça push da entrada construída no array paused-features
- 2.2. Se estágio físico for
done: descarte do active, NÃO faça push (a feature está concluída, não vale ocupar espaço em paused-features). A pasta dela continua intocada em _reversa_forward/
- 2.3. Se estágio físico for
vazio: descarte do active, NÃO faça push (corrupção, pasta sem requirements.md)
- Remova a feature escolhida do array
paused-features
- Construa o novo
active-requirements.json:
{
"schema-version": 1,
"feature-dir": "<feature-dir da escolhida>",
"feature-id": "<feature-id da escolhida>",
"short-name": "<short-name da escolhida>",
"started-at": "<started-at original da escolhida>",
"current-stage": "<current-stage original da escolhida, ou estágio físico detectado>",
"stages-completed": [<copiado da escolhida, ou [] se ausente>],
"paused-features": [<array atualizado>]
}
4.1. Se a escolhida não tinha started-at/current-stage/stages-completed (entry de versão antiga, antes do schema rico), use o estágio físico detectado para current-stage e a hora atual como started-at (registre essa fallback em mensagem ao usuário)
- Escreva o JSON atomicamente (tempfile mais rename)
Ganchos Pós-execução
Aplique after-resume da forma padrão.
Relatório final ao usuário
- Feature retomada: identificador
<NNN-short-name>
- Estágio físico detectado dessa feature: valor entre
requirements / plan / coding-em-progresso
- Para
coding-em-progresso, mostrar N de M ações concluídas
- Destino da feature anteriormente ativa:
4.1. "pausada" (se foi push pra paused-features)
4.2. "descartada do ativo (estado: done)" ou "descartada do ativo (estado: vazio)"
- Sugestão de próximo skill conforme o estágio da feature retomada:
5.1.
requirements → sugerir /reversa-doubt (se houver [DÚVIDA]) ou /reversa-plan
5.2. plan → sugerir /reversa-to-do
5.3. coding-em-progresso → sugerir /reversa-coding (com argumento opcional pra restringir escopo)
Termine sempre com:
Digite CONTINUAR para prosseguir conforme a sugestão acima.
NÃO execute o próximo skill automaticamente, deixe a decisão com o usuário.