Você é o executor. Sua missão é transformar actions.md em código real, fase por fase, respeitando paralelismo e dependências. Ao terminar, deixar dois rastros para auditoria futura: legacy-impact.md (o que foi mexido no legado) e regression-watch.md (o que precisa continuar verdadeiro nas próximas extrações).
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/
Âncora de contexto: legado ou greenfield
Esse skill EXIGE uma âncora de contexto em _reversa_sdd/, senão os dois artefatos centrais (legacy-impact.md e regression-watch.md) perdem o valor e o ciclo forward vira um framework genérico qualquer. Duas âncoras são válidas:
- Legado:
_reversa_sdd/ contém architecture.md E domain.md (extração do Time de Descoberta via /reversa). Comportamento clássico.
- Greenfield:
_reversa_sdd/ contém prd.md E pelo menos uma spec em _reversa_sdd/sdd/ (artefatos do /reversa-new). Projeto novo é caso válido, o pipeline não bloqueia por ausência da extração. Os artefatos do skill se adaptam conforme descrito nas seções de geração.
Se existirem as duas âncoras (projeto que rodou /reversa e /reversa-new), use a de legado como principal e as specs SDD como complemento.
A verificação continua estrita quando NENHUMA âncora existe: o skill aborta com mensagem clara, NÃO oferece opção de prosseguir mesmo assim, NÃO escreve nada em disco.
Verificações Iniciais
Leia .reversa/active-requirements.json
1.1. Se ausente, aborte com mensagem apontando /reversa-requirements
Verifique a existência de feature-dir/actions.md
2.1. Se ausente, aborte com mensagem apontando /reversa-to-do
Verifique a âncora de contexto:
3.1. Âncora de legado: _reversa_sdd/ existe E contém architecture.md E domain.md. Se satisfeita, registre internamente o cenário como legado e siga para o passo 4.
3.2. Âncora greenfield: _reversa_sdd/ existe E contém prd.md E pelo menos um arquivo .md em _reversa_sdd/sdd/. Se satisfeita (e a de legado não), registre o cenário como greenfield, informe ao usuário ("Sem extração de legado, vou ancorar nos artefatos do /reversa-new: prd.md e specs SDD.") e siga para o passo 4.
3.3. Se NENHUMA das duas âncoras estiver satisfeita, aborte com a mensagem:
> 🛑 `/reversa-coding` exige uma âncora de contexto em `_reversa_sdd/` e não encontrei nenhuma:
>
> - **Legado:** `architecture.md` + `domain.md` (gere com `/reversa`)
> - **Greenfield:** `prd.md` + specs em `sdd/` (gere com `/reversa-new`)
>
> Sem esse contexto, `legacy-impact.md` e `regression-watch.md` ficariam sem âncora e o ciclo forward perderia seu diferencial. Rode um dos dois pipelines e volte para cá.
3.4. No caso do passo 3.3, NÃO crie legacy-impact.md, NÃO crie regression-watch.md, NÃO toque em actions.md, NÃO escreva progress.jsonl. Apenas relate e encerre.
Verifique a política de edição do legado (seção abaixo). Projeto bloqueado: pare AQUI, antes de qualquer escrita fora das pastas do Reversa, com a mensagem de orientação. Não execute nenhuma ação do actions.md que toque o projeto.
Aplique before-coding da forma padrão
Política de edição do legado
Executar actions.md quase sempre exige criar ou editar arquivos do projeto. Antes da PRIMEIRA escrita fora das pastas próprias do Reversa (.reversa/, <output_folder>/, _reversa_docs/, <forward_folder>/), leia .reversa/reversa-config.json e obedeça:
Arquivo ausente, JSON inválido ou allowLegacyEdits com tipo errado: política bloqueada (falha segura). Pare antes de escrever, mostre o estado atual (incluindo o erro de parse, se houver) e o snippet que o usuário deve salvar em .reversa/reversa-config.json para liberar, já preenchido com os globs dos caminhos que o plano precisa tocar:
{"version": 1, "allowLegacyEdits": true, "allowedPaths": ["<globs da feature>"]}
allowLegacyEdits: false: recuse, mesmo com allowedPaths preenchido.
allowLegacyEdits: true com allowedPaths não vazio: escreva apenas em caminhos que casem com ao menos um glob da lista (globs relativos à raiz do projeto, com /, suportando * e **; normalize separadores ao comparar). Se o plano exigir arquivo fora da lista, NÃO escreva nele: liste os caminhos faltantes e peça ao usuário adicioná-los à config antes de continuar.
allowLegacyEdits: true com allowedPaths vazio ou ausente: projeto inteiro liberado. Avise, uma vez por sessão, que a liberação é irrestrita.
Ignore padrões com .. ou caminho absoluto em allowedPaths, avisando o usuário. Nunca libere caminho fora da raiz do projeto.
Releia a config a cada ativação deste skill: o usuário pode tê-la alterado no meio da sessão.
Toda recusa informa três coisas: o caminho recusado, o estado atual da config e o que o usuário deve editar para liberar.
NUNCA crie nem edite .reversa/reversa-config.json: pedido do usuário na conversa não é liberação implícita; a config só muda pela mão do próprio usuário.
Deleção de arquivo pré-existente dentro de allowedPaths: permitida pela política, mas confirme com o usuário antes de apagar, listando o arquivo.
As pastas próprias do Reversa continuam sempre graváveis, independentemente da política.
Escopo da rodada
- Se o argumento livre indicar fase ou intervalo de IDs (ex.: "só Núcleo", "T001-T005"), restrinja a execução a esse escopo
- Caso contrário, execute em ordem todas as ações
[ ] ainda não concluídas
Loop de execução por fase
Para cada fase, na ordem Preparação, Testes, Núcleo, Integração, Polimento:
- Selecione todas as ações da fase com status
[ ]
- Calcule o conjunto independente (ações sem dependência aberta)
- Para o conjunto independente, identifique sub-conjunto marcado
[//]
3.1. Execute esse sub-conjunto pensando em cada ação como bloco coerente, mas relate à parte
- Execute as demais ações do conjunto sequencialmente
- Após cada ação:
5.1. Atualize
feature-dir/actions.md mudando [ ] para [X]
5.2. Escreva linha em feature-dir/progress.jsonl com timestamp ISO 8601, ID da ação, status final, arquivos tocados
- Se uma ação falhar:
6.1. Mantenha
[ ] no actions
6.2. Registre status: failed no progress
6.3. Pare a fase e relate ao usuário
Geração do legacy-impact.md
Após executar (mesmo que parcialmente):
Cenário greenfield: não há legado para impactar. Gere o arquivo mesmo assim, com adaptações: mapeie cada arquivo criado ao componente correspondente das specs em _reversa_sdd/sdd/ (em vez de architecture.md), use o tipo de impacto componente-novo para tudo, e registre no cabeçalho: "Feature greenfield, sem legado pré-existente. Âncora: prd.md + specs SDD." As seções "Preservadas" e "Modificadas" ficam vazias com essa nota. Pule os passos 4 e 5 abaixo.
Cenário legado:
- Para cada arquivo do projeto tocado, mapeie ao componente correspondente em
_reversa_sdd/architecture.md quando possível
- Para cada componente afetado, classifique o tipo de impacto:
regra-alterada, regra-removida, regra-nova, componente-novo, componente-extinto, delta-de-dados, delta-de-contrato-externo
- Atribua severidade alinhada com
/reversa-audit (CRITICAL, HIGH, MEDIUM, LOW)
- Liste regras 🟢 do
_reversa_sdd/domain.md que continuam intactas (vão para a seção "Preservadas")
- Liste regras 🟢 que foram alteradas ou removidas (vão para a seção "Modificadas")
Estrutura do arquivo:
- Cabeçalho com data, identificador da feature e o estado da política de edição do legado no momento da execução (
allowLegacyEdits e os caminhos que allowedPaths liberou)
- Tabela
Arquivo afetado | Componente | Tipo | Severidade | Justificativa
- Diff conceitual por componente, em prosa
- Seção "Preservadas"
- Seção "Modificadas"
Grave em feature-dir/legacy-impact.md com escrita atômica, rewrite completo.
Geração do regression-watch.md
Cenário greenfield: não há regras 🟢 para vigiar (nada foi extraído de código existente ainda). Gere o arquivo com a estrutura padrão, watch principal vazio, e registre os RFs implementados (das specs SDD) na seção "Observações", sem peso de regressão. Eles ganham peso quando uma futura extração /reversa sobre o código novo os confirmar como 🟢. Pule os passos 1 a 4 abaixo (o passo 5, IDs estáveis, vale para as observações).
Cenário legado:
- Para cada regra na seção "Modificadas" do
legacy-impact.md, gere um watch item
- Para regras explicitamente removidas, gere watch item do tipo
ausência
- Para regras alteradas, gere watch item do tipo
redação ou presença conforme o caso
- Para regras com confidência rebaixada, gere watch item do tipo
confidência
- Atribua ID estável
W001, W002, ..., reciclando IDs antigos do arquivo se já existir
Estrutura:
- Cabeçalho com identificador da feature
- Tabela
ID | Origem (arquivo, seção) | Regra esperada após mudança | Tipo de verificação | Sinal de violação
- Seção "Histórico de re-extrações" inicialmente vazia, será preenchida pelo agente reverso quando rodar
/reversa de novo
- Seção "Arquivadas" inicialmente vazia
NUNCA inclua no watch principal regras que originalmente eram 🟡 ou 🔴, essas vão para uma seção "Observações" sem peso de regressão.
Grave em feature-dir/regression-watch.md. A primeira execução cria o arquivo; execuções seguintes fazem append nas seções de itens novos, jamais reescrevendo histórico ou IDs antigos.
Atualização do progress.jsonl
Cada linha deve ter, no mínimo:
{"ts":"2026-05-05T16:30:00Z","action":"T003","status":"done","files":["src/x/y.js"]}
Append-only. Jamais reescreva linhas anteriores, mesmo se descobrir que ficaram erradas. Para corrigir, adicione nova linha status: corrected com o ID alvo.
Ganchos Pós-execução
Aplique after-coding da forma padrão.
Relatório final ao usuário
- Quantas ações executadas com sucesso
- Quantas falharam (se houver)
- Caminho absoluto de
actions.md, progress.jsonl, legacy-impact.md, regression-watch.md
- Quantos watch items foram criados nessa rodada
- Aviso explícito: rode
/reversa-sync para converger a entrega em _reversa_sdd/addenda/. NÃO é preciso re-rodar /reversa a cada entrega: o adendo mantém a extração válida, e a re-extração completa fica para de vez em quando, acumuladas algumas features
- Se a execução foi parcial, indique a próxima fase ou ação pendente
NUNCA dispare a re-extração sozinho, isso é decisão do usuário.
Termine com:
Digite CONTINUAR para prosseguir com /reversa-sync (convergência da entrega na extração) ou outra ação que o usuário quiser.
1---2name: reversa-coding3description: Executa o actions.md em código: marca checkboxes [X], escreve progress.jsonl e gera legacy-impact.md e regression-watch.md. Funciona ancorado no legado (`_reversa_sdd/`) ou greenfield (`/reversa-new`). Último passo do ciclo forward.4license: MIT5---67Você é o executor. Sua missão é transformar `actions.md` em código real, fase por fase, respeitando paralelismo e dependências. Ao terminar, deixar dois rastros para auditoria futura: `legacy-impact.md` (o que foi mexido no legado) e `regression-watch.md` (o que precisa continuar verdadeiro nas próximas extrações).89## Antes de começar10111. Leia `.reversa/state.json` para resolver `output_folder` e `forward_folder`122. Use os valores reais nos lugares onde o texto mencionar `_reversa_sdd/` ou `_reversa_forward/`1314## Âncora de contexto: legado ou greenfield1516Esse skill **EXIGE** uma âncora de contexto em `_reversa_sdd/`, senão os dois artefatos centrais (`legacy-impact.md` e `regression-watch.md`) perdem o valor e o ciclo forward vira um framework genérico qualquer. Duas âncoras são válidas:17181. **Legado:** `_reversa_sdd/` contém `architecture.md` E `domain.md` (extração do Time de Descoberta via `/reversa`). Comportamento clássico.192. **Greenfield:** `_reversa_sdd/` contém `prd.md` E pelo menos uma spec em `_reversa_sdd/sdd/` (artefatos do `/reversa-new`). Projeto novo é caso válido, o pipeline não bloqueia por ausência da extração. Os artefatos do skill se adaptam conforme descrito nas seções de geração.2021Se existirem as duas âncoras (projeto que rodou `/reversa` e `/reversa-new`), use a de legado como principal e as specs SDD como complemento.2223A verificação continua estrita quando NENHUMA âncora existe: o skill aborta com mensagem clara, NÃO oferece opção de prosseguir mesmo assim, NÃO escreve nada em disco.2425## Verificações Iniciais26271. Leia `.reversa/active-requirements.json`28 1.1. Se ausente, aborte com mensagem apontando `/reversa-requirements`292. Verifique a existência de `feature-dir/actions.md`30 2.1. Se ausente, aborte com mensagem apontando `/reversa-to-do`313. Verifique a âncora de contexto:32 3.1. **Âncora de legado:** `_reversa_sdd/` existe E contém `architecture.md` E `domain.md`. Se satisfeita, registre internamente o cenário como **legado** e siga para o passo 4.33 3.2. **Âncora greenfield:** `_reversa_sdd/` existe E contém `prd.md` E pelo menos um arquivo `.md` em `_reversa_sdd/sdd/`. Se satisfeita (e a de legado não), registre o cenário como **greenfield**, informe ao usuário ("Sem extração de legado, vou ancorar nos artefatos do `/reversa-new`: `prd.md` e specs SDD.") e siga para o passo 4.34 3.3. Se NENHUMA das duas âncoras estiver satisfeita, aborte com a mensagem:3536 > 🛑 `/reversa-coding` exige uma âncora de contexto em `_reversa_sdd/` e não encontrei nenhuma:37 >38 > - **Legado:** `architecture.md` + `domain.md` (gere com `/reversa`)39 > - **Greenfield:** `prd.md` + specs em `sdd/` (gere com `/reversa-new`)40 >41 > Sem esse contexto, `legacy-impact.md` e `regression-watch.md` ficariam sem âncora e o ciclo forward perderia seu diferencial. Rode um dos dois pipelines e volte para cá.4243 3.4. No caso do passo 3.3, NÃO crie `legacy-impact.md`, NÃO crie `regression-watch.md`, NÃO toque em `actions.md`, NÃO escreva `progress.jsonl`. Apenas relate e encerre.44454. Verifique a política de edição do legado (seção abaixo). Projeto bloqueado: pare AQUI, antes de qualquer escrita fora das pastas do Reversa, com a mensagem de orientação. Não execute nenhuma ação do `actions.md` que toque o projeto.465. Aplique `before-coding` da forma padrão4748## Política de edição do legado4950Executar `actions.md` quase sempre exige criar ou editar arquivos do projeto. Antes da PRIMEIRA escrita fora das pastas próprias do Reversa (`.reversa/`, `<output_folder>/`, `_reversa_docs/`, `<forward_folder>/`), leia `.reversa/reversa-config.json` e obedeça:51521. **Arquivo ausente, JSON inválido ou `allowLegacyEdits` com tipo errado**: política bloqueada (falha segura). Pare antes de escrever, mostre o estado atual (incluindo o erro de parse, se houver) e o snippet que o usuário deve salvar em `.reversa/reversa-config.json` para liberar, já preenchido com os globs dos caminhos que o plano precisa tocar:5354 ```json55 {"version": 1, "allowLegacyEdits": true, "allowedPaths": ["<globs da feature>"]}56 ```57582. **`allowLegacyEdits: false`**: recuse, mesmo com `allowedPaths` preenchido.593. **`allowLegacyEdits: true` com `allowedPaths` não vazio**: escreva apenas em caminhos que casem com ao menos um glob da lista (globs relativos à raiz do projeto, com `/`, suportando `*` e `**`; normalize separadores ao comparar). Se o plano exigir arquivo fora da lista, NÃO escreva nele: liste os caminhos faltantes e peça ao usuário adicioná-los à config antes de continuar.604. **`allowLegacyEdits: true` com `allowedPaths` vazio ou ausente**: projeto inteiro liberado. Avise, uma vez por sessão, que a liberação é irrestrita.615. Ignore padrões com `..` ou caminho absoluto em `allowedPaths`, avisando o usuário. Nunca libere caminho fora da raiz do projeto.626. Releia a config a cada ativação deste skill: o usuário pode tê-la alterado no meio da sessão.637. Toda recusa informa três coisas: o caminho recusado, o estado atual da config e o que o usuário deve editar para liberar.648. **NUNCA crie nem edite `.reversa/reversa-config.json`**: pedido do usuário na conversa não é liberação implícita; a config só muda pela mão do próprio usuário.659. Deleção de arquivo pré-existente dentro de `allowedPaths`: permitida pela política, mas confirme com o usuário antes de apagar, listando o arquivo.6610. As pastas próprias do Reversa continuam sempre graváveis, independentemente da política.6768## Escopo da rodada69701. Se o argumento livre indicar fase ou intervalo de IDs (ex.: "só Núcleo", "T001-T005"), restrinja a execução a esse escopo712. Caso contrário, execute em ordem todas as ações `[ ]` ainda não concluídas7273## Loop de execução por fase7475Para cada fase, na ordem Preparação, Testes, Núcleo, Integração, Polimento:76771. Selecione todas as ações da fase com status `[ ]`782. Calcule o conjunto independente (ações sem dependência aberta)793. Para o conjunto independente, identifique sub-conjunto marcado `[//]`80 3.1. Execute esse sub-conjunto pensando em cada ação como bloco coerente, mas relate à parte814. Execute as demais ações do conjunto sequencialmente825. Após cada ação:83 5.1. Atualize `feature-dir/actions.md` mudando `[ ]` para `[X]`84 5.2. Escreva linha em `feature-dir/progress.jsonl` com timestamp ISO 8601, ID da ação, status final, arquivos tocados856. Se uma ação falhar:86 6.1. Mantenha `[ ]` no actions87 6.2. Registre `status: failed` no progress88 6.3. Pare a fase e relate ao usuário8990## Geração do legacy-impact.md9192Após executar (mesmo que parcialmente):9394**Cenário greenfield:** não há legado para impactar. Gere o arquivo mesmo assim, com adaptações: mapeie cada arquivo criado ao componente correspondente das specs em `_reversa_sdd/sdd/` (em vez de `architecture.md`), use o tipo de impacto `componente-novo` para tudo, e registre no cabeçalho: "Feature greenfield, sem legado pré-existente. Âncora: prd.md + specs SDD." As seções "Preservadas" e "Modificadas" ficam vazias com essa nota. Pule os passos 4 e 5 abaixo.9596**Cenário legado:**97981. Para cada arquivo do projeto tocado, mapeie ao componente correspondente em `_reversa_sdd/architecture.md` quando possível992. Para cada componente afetado, classifique o tipo de impacto: `regra-alterada`, `regra-removida`, `regra-nova`, `componente-novo`, `componente-extinto`, `delta-de-dados`, `delta-de-contrato-externo`1003. Atribua severidade alinhada com `/reversa-audit` (CRITICAL, HIGH, MEDIUM, LOW)1014. Liste regras 🟢 do `_reversa_sdd/domain.md` que continuam intactas (vão para a seção "Preservadas")1025. Liste regras 🟢 que foram alteradas ou removidas (vão para a seção "Modificadas")103104Estrutura do arquivo:1051061. Cabeçalho com data, identificador da feature e o estado da política de edição do legado no momento da execução (`allowLegacyEdits` e os caminhos que `allowedPaths` liberou)1072. Tabela `Arquivo afetado | Componente | Tipo | Severidade | Justificativa`1083. Diff conceitual por componente, em prosa1094. Seção "Preservadas"1105. Seção "Modificadas"111112Grave em `feature-dir/legacy-impact.md` com escrita atômica, rewrite completo.113114## Geração do regression-watch.md115116**Cenário greenfield:** não há regras 🟢 para vigiar (nada foi extraído de código existente ainda). Gere o arquivo com a estrutura padrão, watch principal vazio, e registre os RFs implementados (das specs SDD) na seção "Observações", sem peso de regressão. Eles ganham peso quando uma futura extração `/reversa` sobre o código novo os confirmar como 🟢. Pule os passos 1 a 4 abaixo (o passo 5, IDs estáveis, vale para as observações).117118**Cenário legado:**1191201. Para cada regra na seção "Modificadas" do `legacy-impact.md`, gere um watch item1212. Para regras explicitamente removidas, gere watch item do tipo `ausência`1223. Para regras alteradas, gere watch item do tipo `redação` ou `presença` conforme o caso1234. Para regras com confidência rebaixada, gere watch item do tipo `confidência`1245. Atribua ID estável `W001`, `W002`, ..., reciclando IDs antigos do arquivo se já existir125126Estrutura:1271281. Cabeçalho com identificador da feature1292. Tabela `ID | Origem (arquivo, seção) | Regra esperada após mudança | Tipo de verificação | Sinal de violação`1303. Seção "Histórico de re-extrações" inicialmente vazia, será preenchida pelo agente reverso quando rodar `/reversa` de novo1314. Seção "Arquivadas" inicialmente vazia132133NUNCA inclua no watch principal regras que originalmente eram 🟡 ou 🔴, essas vão para uma seção "Observações" sem peso de regressão.134135Grave em `feature-dir/regression-watch.md`. A primeira execução cria o arquivo; execuções seguintes fazem append nas seções de itens novos, jamais reescrevendo histórico ou IDs antigos.136137## Atualização do progress.jsonl138139Cada linha deve ter, no mínimo:140141```json142{"ts":"2026-05-05T16:30:00Z","action":"T003","status":"done","files":["src/x/y.js"]}143```144145Append-only. Jamais reescreva linhas anteriores, mesmo se descobrir que ficaram erradas. Para corrigir, adicione nova linha `status: corrected` com o ID alvo.146147## Ganchos Pós-execução148149Aplique `after-coding` da forma padrão.150151## Relatório final ao usuário1521531. Quantas ações executadas com sucesso1542. Quantas falharam (se houver)1553. Caminho absoluto de `actions.md`, `progress.jsonl`, `legacy-impact.md`, `regression-watch.md`1564. Quantos watch items foram criados nessa rodada1575. Aviso explícito: rode `/reversa-sync` para converger a entrega em `_reversa_sdd/addenda/`. NÃO é preciso re-rodar `/reversa` a cada entrega: o adendo mantém a extração válida, e a re-extração completa fica para de vez em quando, acumuladas algumas features1586. Se a execução foi parcial, indique a próxima fase ou ação pendente159160NUNCA dispare a re-extração sozinho, isso é decisão do usuário.161162Termine com:163164> Digite **CONTINUAR** para prosseguir com `/reversa-sync` (convergência da entrega na extração) ou outra ação que o usuário quiser.