oxe-cc 0.6.0 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.cursor/commands/oxe-retro.md +11 -0
  2. package/.github/prompts/oxe-loop.prompt.md +12 -12
  3. package/.github/prompts/oxe-project.prompt.md +12 -12
  4. package/.github/prompts/oxe-retro.prompt.md +12 -0
  5. package/.github/prompts/oxe-security.prompt.md +12 -12
  6. package/.github/prompts/oxe.prompt.md +12 -12
  7. package/AGENTS.md +75 -8
  8. package/CHANGELOG.md +74 -0
  9. package/README.md +323 -287
  10. package/bin/banner.txt +1 -1
  11. package/bin/lib/oxe-project-health.cjs +82 -0
  12. package/bin/oxe-cc.js +13 -1
  13. package/commands/oxe/loop.md +17 -17
  14. package/commands/oxe/oxe.md +16 -16
  15. package/commands/oxe/project.md +16 -16
  16. package/commands/oxe/retro.md +16 -0
  17. package/commands/oxe/review-pr.md +16 -0
  18. package/commands/oxe/security.md +16 -16
  19. package/commands/oxe/update.md +16 -0
  20. package/lib/sdk/index.cjs +22 -1
  21. package/lib/sdk/index.d.ts +28 -2
  22. package/oxe/schemas/plan-agents.schema.json +15 -4
  23. package/oxe/templates/CONFIG.md +6 -1
  24. package/oxe/templates/LESSONS.template.md +43 -0
  25. package/oxe/templates/PLAN.template.md +2 -1
  26. package/oxe/templates/SECURITY.template.md +72 -72
  27. package/oxe/templates/STATE.md +19 -1
  28. package/oxe/templates/config.template.json +2 -0
  29. package/oxe/templates/plan-agents.template.json +1 -0
  30. package/oxe/workflows/help.md +2 -1
  31. package/oxe/workflows/loop.md +57 -57
  32. package/oxe/workflows/next.md +4 -1
  33. package/oxe/workflows/obs.md +17 -0
  34. package/oxe/workflows/oxe.md +115 -115
  35. package/oxe/workflows/plan-agent.md +4 -4
  36. package/oxe/workflows/plan.md +20 -5
  37. package/oxe/workflows/project.md +50 -50
  38. package/oxe/workflows/quick.md +1 -1
  39. package/oxe/workflows/retro.md +62 -0
  40. package/oxe/workflows/security.md +61 -61
  41. package/oxe/workflows/spec.md +26 -0
  42. package/oxe/workflows/verify.md +4 -1
  43. package/package.json +2 -2
@@ -76,9 +76,9 @@ Raiz do ficheiro **`.oxe/plan-agents.json`**:
76
76
 
77
77
  | Campo | Obrigatório | Significado |
78
78
  |-------|-------------|-------------|
79
- | `oxePlanAgentsSchema` | sim | **2** nas gerações atuais ( **1** = legado sem `runId`/`lifecycle` obrigatórios). |
80
- | `runId` | sim (schema 2) | Identidade da sessão do blueprint; nova em cada plan-agent / replan. |
81
- | `lifecycle` | sim (schema 2) | `status`: `pending_execute` \| `executing` \| `closed` \| `invalidated`; `since` ISO; opcional `invalidatedReason`, `invalidatedBy` (`quick` \| `out_of_scope` \| `new_plan` \| `manual`). |
79
+ | `oxePlanAgentsSchema` | sim | **3** nas gerações atuais ( **2** = sem `model_hint`; **1** = legado sem `runId`/`lifecycle` obrigatórios). |
80
+ | `runId` | sim (schema 2) | Identidade da sessão do blueprint; nova em cada plan-agent / replan. |
81
+ | `lifecycle` | sim (schema 2) | `status`: `pending_execute` \| `executing` \| `closed` \| `invalidated`; `since` ISO; opcional `invalidatedReason`, `invalidatedBy` (`quick` \| `out_of_scope` \| `new_plan` \| `manual`). |
82
82
  | `goal` | sim | Frase curta alinhada ao objetivo da entrega (eco da SPEC). |
83
83
  | `specRef` | não | Referência livre (ex.: path `.oxe/SPEC.md` ou nota de versão). |
84
84
  | `agents` | sim | Lista de objetos agente (ver abaixo). |
@@ -133,7 +133,7 @@ Resumo obrigatório no chat: `Gate plan-agent: OK` ou `Gate plan-agent: corrigid
133
133
 
134
134
  <success_criteria>
135
135
  - [ ] `PLAN.md` existe e passa o gate de **`plan.md`**.
136
- - [ ] `plan-agents.json` existe com schema **2**, `runId`, `lifecycle`, e passa **`<plan_agent_quality_gate>`**.
136
+ - [ ] `plan-agents.json` existe com schema **3**, `runId`, `lifecycle`, `model_hint` por agente (ou omitido), e passa **`<plan_agent_quality_gate>`**.
137
137
  - [ ] Cada tarefa `Tn` aparece em **exatamente um** `taskIds`.
138
138
  - [ ] `execution.waves` reflete dependências entre agentes sem ciclos.
139
139
  - [ ] `.oxe/plan-agent-messages/README.md` presente.
@@ -13,6 +13,8 @@ Se o usuário pedir **--replan** (ou replanejamento implícito após `verify_fai
13
13
 
14
14
  <context>
15
15
  - Se existir **`.oxe/OBSERVATIONS.md`** com entradas `pendente` de impacto `plan` ou `all`, incorporar nas tarefas relevantes antes de finalizar o plano (ajustar implementação, verificação ou escopo de Tn) e marcar essas entradas como `incorporada → plan (data)`.
16
+ - Se existir **`.oxe/LESSONS.md`**, ler entradas com `Aplicar em: /oxe-plan` e `Status: ativo`. Aplicar como restrições explícitas no planejamento: ajuste de complexidade de tarefas, padrões de verificação, escolha de modo solo vs agentes. Registrar aplicações como comentário no PLAN.md: `<!-- lição C-NN aplicada: ... -->`.
17
+ - **LESSONS + OBS juntos:** se houver tanto LESSONS quanto OBS pendentes, LESSONS orientam o *como planejar* e OBS orientam o *o que incluir*. Não confundir os papéis.
16
18
  - Não inventar APIs inexistentes: cruzar com **STRUCTURE.md**, **INTEGRATIONS.md** e arquivos reais; respeitar **CONCERNS.md** (evitar agravar dívida conhecida sem tarefa explícita).
17
19
  - Se existir **`.oxe/NOTES.md`**, rever entradas em aberto: incorporar em tarefas (com **Aceite vinculado** quando aplicável) ou registar na secção **Replanejamento** / nota explícita *fora de âmbito desta trilha*.
18
20
  - Se existir **`.oxe/UI-SPEC.md`**, as tarefas de UI devem referenciar secções do UI-SPEC no texto de **Implementação** ou **Verificar**.
@@ -27,22 +29,33 @@ Se o usuário pedir **--replan** (ou replanejamento implícito após `verify_fai
27
29
  </context>
28
30
 
29
31
  <format_plan>
30
- Cada tarefa em PLAN.md deve seguir:
32
+ Cada tarefa em PLAN.md deve seguir a ordem abaixo — **Verificar vem ANTES de Implementar** (test-first):
31
33
 
32
34
  ```markdown
33
35
  ### Tn — título curto
34
36
  - **Arquivos prováveis:** `...`
35
37
  - **Depende de:** Tk ou —
36
38
  - **Onda:** 1 | 2 | …
37
- - **Implementação:** 1–3 frases do que fazer.
39
+ - **Complexidade:** S | M | L | XL
38
40
  - **Verificar:**
39
41
  - Comando: `...` (ex.: npm test, pytest, mvn test)
40
42
  - Manual: (opcional) passos breves
43
+ - **Implementar:** o mínimo para fazer a verificação acima passar (1–3 frases).
41
44
  - **Aceite vinculado:** A1, A2 (IDs exatos da tabela de critérios da SPEC)
42
45
  - **Decisão vinculada:** D-01, D-02 (IDs de `.oxe/DISCUSS.md` — omitir se não houver DISCUSS)
43
- <!-- oxe-task: {"id":"Tn","wave":1,"type":"feature","files":[],"done":false} -->
46
+ <!-- oxe-task: {"id":"Tn","wave":1,"type":"feature","files":[],"done":false,"complexity":"S"} -->
44
47
  ```
45
48
 
49
+ **Escala de Complexidade:**
50
+ | Valor | Esforço estimado | Sinal de alerta |
51
+ |-------|-----------------|-----------------|
52
+ | `S` | < 30 min, 1–2 arquivos | — |
53
+ | `M` | < 2h, 2–5 arquivos | — |
54
+ | `L` | < 1 dia, múltiplos componentes | Verificar que Verificar é específico |
55
+ | `XL` | > 1 dia, impacto arquitetural | **Gate: deve ser quebrada em sub-tarefas ou ter justificativa** |
56
+
57
+ **Princípio test-first:** escreva o `Verificar` antes de escrever o `Implementar`. A pergunta é: "Como saberei que está pronto?" — a resposta define o target; `Implementar` é o caminho mínimo até esse target.
58
+
46
59
  **Projetos sem suíte de testes única (legado):** o bloco **Verificar** pode usar `Comando: —` e **Manual** com Grep, leitura de paths ou checklist — ver exemplos em **`oxe/workflows/references/legacy-brownfield.md`**. Todo critério **A*** da SPEC deve aparecer em **Aceite vinculado** de alguma tarefa ou como gap explícito.
47
60
 
48
61
  **Comparativo host ↔ cliente (migração / paridade):** pode-se dedicar tarefas a produzir ou atualizar uma **matriz Markdown** (classificações: equivalente / implementação diferente / só host / só cliente) com colunas de artefactos reais no repo — ver secção *Molde de comparativo* em **`oxe/workflows/references/legacy-brownfield.md`**. Cada **Tn** deve manter **Aceite vinculado** aos **A*** que essa matriz satisfaz.
@@ -56,8 +69,10 @@ Antes de finalizar a resposta ao utilizador, o agente **deve** percorrer este ga
56
69
  3. **Cobertura A*:** todos os IDs da tabela de critérios em `.oxe/SPEC.md` aparecem em **Aceite vinculado:** de alguma tarefa, ou há nota explícita de **gap** no PLAN (fora de âmbito / adiado) por ID.
57
70
  4. **Ondas:** cada número de **Onda:** usado tem pelo menos uma tarefa; sem ondas vazias.
58
71
  5. **`plan_max_tasks_per_wave`:** se `.oxe/config.json` tiver valor **> 0**, contar tarefas por **Onda**; nenhuma onda excede o limite.
59
- 6. **UI-SPEC:** se existir `.oxe/UI-SPEC.md`, toda tarefa cuja **Implementação** ou **Verificar** toque UI (paths como `*.tsx`, `components/`, ou palavras-chave front, ou pedido explícito do utilizador) deve citar **secção § do UI-SPEC** ou path explícito.
60
- 7. **Fidelidade de decisões:** se existir `.oxe/DISCUSS.md` com IDs **D-NN**, cada decisão com impacto técnico deve aparecer em **Decisão vinculada:** de alguma tarefa, ou ter nota explícita de gap (fora do escopo desta entrega). Sem cobertura para D-NN técnico = falha do gate.
72
+ 6. **UI-SPEC:** se existir `.oxe/UI-SPEC.md`, toda tarefa cuja **Implementar** ou **Verificar** toque UI deve citar **secção § do UI-SPEC** ou path explícito.
73
+ 7. **Fidelidade de decisões:** se existir `.oxe/DISCUSS.md` com IDs **D-NN**, cada decisão com impacto técnico deve aparecer em **Decisão vinculada:** de alguma tarefa, ou ter nota explícita de gap. Sem cobertura para D-NN técnico = falha do gate.
74
+ 8. **Complexidade XL:** toda tarefa com `Complexidade: XL` deve ter sub-tarefas explícitas (ex.: T3.1, T3.2 — como bullets dentro da tarefa) **ou** justificativa na tarefa explicando por que não pode ser quebrada. Tarefa XL sem sub-tarefas e sem justificativa = falha do gate.
75
+ 9. **Test-first:** em toda tarefa, `Verificar` deve preceder `Implementar` no texto. Se a ordem estiver invertida, corrigir antes de finalizar.
61
76
 
62
77
  Se após correções estruturais persistir ambiguidade de produto: **uma** frase recomendando `oxe:discuss` ou `oxe:spec`.
63
78
 
@@ -1,50 +1,50 @@
1
- # OXE — Workflow: project (gestão de projeto)
2
-
3
- <objective>
4
- Ponto de entrada unificado para as três operações de gestão de projeto OXE:
5
-
6
- - **milestone** — marcos de entrega (M-NN): `new`, `complete`, `status`, `audit`
7
- - **workstream** — trilhas paralelas: `new <nome>`, `switch <nome>`, `list`, `close <nome>`
8
- - **checkpoint** — snapshot nomeado de sessão: `[slug]`
9
-
10
- Detecta a operação pelo primeiro token do input e delega ao workflow canônico correspondente.
11
- </objective>
12
-
13
- <context>
14
- - Este workflow é um **dispatcher**: lê o input, identifica a operação e executa o workflow correto.
15
- - Workflows canônicos: `oxe/workflows/milestone.md`, `oxe/workflows/workstream.md`, `oxe/workflows/checkpoint.md`.
16
- - Se o input for ambíguo, apresentar as 3 operações disponíveis e pedir escolha.
17
- - Sem input: mostrar o estado atual de milestones e workstreams ativos lendo `STATE.md`, `MILESTONES.md` e `CHECKPOINTS.md`.
18
- </context>
19
-
20
- <dispatch_table>
21
- | Input começa com | Delega para | Exemplos |
22
- |------------------|-------------|---------|
23
- | `milestone new ...` | `milestone.md` + subcomando `new` | `/oxe-project milestone new v1.0` |
24
- | `milestone complete` | `milestone.md` + subcomando `complete` | `/oxe-project milestone complete` |
25
- | `milestone status` | `milestone.md` + subcomando `status` | `/oxe-project milestone status` |
26
- | `milestone audit` | `milestone.md` + subcomando `audit` | `/oxe-project milestone audit` |
27
- | `workstream new <nome>` | `workstream.md` + subcomando `new` | `/oxe-project workstream new auth` |
28
- | `workstream switch <nome>` | `workstream.md` + subcomando `switch` | `/oxe-project workstream switch auth` |
29
- | `workstream list` | `workstream.md` + subcomando `list` | `/oxe-project workstream list` |
30
- | `workstream close <nome>` | `workstream.md` + subcomando `close` | `/oxe-project workstream close auth` |
31
- | `checkpoint [slug]` | `checkpoint.md` | `/oxe-project checkpoint pre-refactor` |
32
- | *(sem input)* | Status atual | `/oxe-project` |
33
- </dispatch_table>
34
-
35
- <process>
36
- 1. Ler o input do usuário (texto após o comando).
37
- 2. Identificar o primeiro token:
38
- - `milestone` → carregar e executar `oxe/workflows/milestone.md` passando o restante como subcomando.
39
- - `workstream` → carregar e executar `oxe/workflows/workstream.md` passando o restante como subcomando.
40
- - `checkpoint` → carregar e executar `oxe/workflows/checkpoint.md` passando o slug (se houver).
41
- - *(vazio)* → ler `STATE.md`, `MILESTONES.md` (se existir) e listar: milestone ativo (M-NN / nenhum), workstreams abertos, último checkpoint. Sugerir próxima operação.
42
- - *(ambíguo)* → listar as 3 operações disponíveis com exemplos de uso.
43
- 3. Executar o workflow delegado integralmente.
44
- </process>
45
-
46
- <success_criteria>
47
- - [ ] O workflow correto foi executado com base no input.
48
- - [ ] Sem input: STATUS atual de milestone ativo, workstreams e último checkpoint mostrado.
49
- - [ ] Input ambíguo: máximo 3 opções apresentadas com exemplos, não listas longas.
50
- </success_criteria>
1
+ # OXE — Workflow: project (gestão de projeto)
2
+
3
+ <objective>
4
+ Ponto de entrada unificado para as três operações de gestão de projeto OXE:
5
+
6
+ - **milestone** — marcos de entrega (M-NN): `new`, `complete`, `status`, `audit`
7
+ - **workstream** — trilhas paralelas: `new <nome>`, `switch <nome>`, `list`, `close <nome>`
8
+ - **checkpoint** — snapshot nomeado de sessão: `[slug]`
9
+
10
+ Detecta a operação pelo primeiro token do input e delega ao workflow canônico correspondente.
11
+ </objective>
12
+
13
+ <context>
14
+ - Este workflow é um **dispatcher**: lê o input, identifica a operação e executa o workflow correto.
15
+ - Workflows canônicos: `oxe/workflows/milestone.md`, `oxe/workflows/workstream.md`, `oxe/workflows/checkpoint.md`.
16
+ - Se o input for ambíguo, apresentar as 3 operações disponíveis e pedir escolha.
17
+ - Sem input: mostrar o estado atual de milestones e workstreams ativos lendo `STATE.md`, `MILESTONES.md` e `CHECKPOINTS.md`.
18
+ </context>
19
+
20
+ <dispatch_table>
21
+ | Input começa com | Delega para | Exemplos |
22
+ |------------------|-------------|---------|
23
+ | `milestone new ...` | `milestone.md` + subcomando `new` | `/oxe-project milestone new v1.0` |
24
+ | `milestone complete` | `milestone.md` + subcomando `complete` | `/oxe-project milestone complete` |
25
+ | `milestone status` | `milestone.md` + subcomando `status` | `/oxe-project milestone status` |
26
+ | `milestone audit` | `milestone.md` + subcomando `audit` | `/oxe-project milestone audit` |
27
+ | `workstream new <nome>` | `workstream.md` + subcomando `new` | `/oxe-project workstream new auth` |
28
+ | `workstream switch <nome>` | `workstream.md` + subcomando `switch` | `/oxe-project workstream switch auth` |
29
+ | `workstream list` | `workstream.md` + subcomando `list` | `/oxe-project workstream list` |
30
+ | `workstream close <nome>` | `workstream.md` + subcomando `close` | `/oxe-project workstream close auth` |
31
+ | `checkpoint [slug]` | `checkpoint.md` | `/oxe-project checkpoint pre-refactor` |
32
+ | *(sem input)* | Status atual | `/oxe-project` |
33
+ </dispatch_table>
34
+
35
+ <process>
36
+ 1. Ler o input do usuário (texto após o comando).
37
+ 2. Identificar o primeiro token:
38
+ - `milestone` → carregar e executar `oxe/workflows/milestone.md` passando o restante como subcomando.
39
+ - `workstream` → carregar e executar `oxe/workflows/workstream.md` passando o restante como subcomando.
40
+ - `checkpoint` → carregar e executar `oxe/workflows/checkpoint.md` passando o slug (se houver).
41
+ - *(vazio)* → ler `STATE.md`, `MILESTONES.md` (se existir) e listar: milestone ativo (M-NN / nenhum), workstreams abertos, último checkpoint. Sugerir próxima operação.
42
+ - *(ambíguo)* → listar as 3 operações disponíveis com exemplos de uso.
43
+ 3. Executar o workflow delegado integralmente.
44
+ </process>
45
+
46
+ <success_criteria>
47
+ - [ ] O workflow correto foi executado com base no input.
48
+ - [ ] Sem input: STATUS atual de milestone ativo, workstreams e último checkpoint mostrado.
49
+ - [ ] Input ambíguo: máximo 3 opções apresentadas com exemplos, não listas longas.
50
+ </success_criteria>
@@ -140,7 +140,7 @@ No final de **`.oxe/QUICK.md`**, mantenha a linha:
140
140
  Se **sim**, o próximo passo recomendado no chat é **`/oxe-spec`** (depois discuss/plan conforme config).
141
141
 
142
142
  <process>
143
- 1. Garantir `.oxe/` (usar template de STATE só se `STATE.md` não existir).
143
+ 1. Garantir `.oxe/` (usar template de STATE só se `STATE.md` não existir). Verificar **`.oxe/OBSERVATIONS.md`** — se houver entradas `pendente` com impacto `all`, registrar como restrições nos **Passos** ou no **Contexto** do QUICK.md antes de finalizar; marcar as OBS como `incorporada → quick (data)`.
144
144
  2. Avaliar se PDDA lean se aplica (ver `<plan_driven_dynamic_agents_lean>` — domínios distintos, 5+ passos, ou flag `--agents`).
145
145
  3. Criar ou substituir **`.oxe/QUICK.md`** com:
146
146
  - **Objetivo** — uma frase. *(Esta é a minispec: restringe o escopo de todos os agentes e passos.)*
@@ -0,0 +1,62 @@
1
+ # OXE — Workflow: retro (retrospectiva de ciclo)
2
+
3
+ <objective>
4
+ Sintetizar os aprendizados de um ciclo completo (spec → verify) em **`.oxe/LESSONS.md`** — um arquivo prescritivo e cumulativo que alimenta automaticamente ciclos futuros.
5
+
6
+ **Princípio:** lições não são diário — são instruções para o próximo ciclo. Cada entrada diz COMO agir diferente, não apenas o que aconteceu.
7
+
8
+ Pode ser chamado:
9
+ - Após `/oxe-verify` (ciclo normal completo)
10
+ - Após `/oxe-verify` com falha e replanejamento (ciclo com retrabalho)
11
+ - A qualquer momento para capturar aprendizados antes que se percam
12
+ </objective>
13
+
14
+ <context>
15
+ - **Pré-requisito preferível:** `.oxe/VERIFY.md` existente. Sem ele, a retro é baseada em STATE.md e relato do usuário.
16
+ - **Artefato:** `.oxe/LESSONS.md` — append-only por padrão; nunca apagar entradas anteriores, apenas mudar `Status` para `resolvido`.
17
+ - **Consumidores:** `/oxe-spec` (lições tipo `spec`), `/oxe-plan` (lições tipo `plan`), `/oxe-scan` (lições tipo `process`), `/oxe-execute` (lições tipo `execute`).
18
+ - **Ciclo ID:** sequencial `C-01`, `C-02`, … (continuar do último em LESSONS.md).
19
+ - Template: `oxe/templates/LESSONS.template.md`.
20
+ </context>
21
+
22
+ <taxonomy>
23
+ ## Taxonomia de tipos de lição
24
+
25
+ | Tipo | Quando usar | Consumido por |
26
+ |------|-------------|---------------|
27
+ | `spec` | Problemas na definição de requisitos ou critérios A* | `/oxe-spec` Fase 1/3 |
28
+ | `plan` | Problemas de granularidade, ondas, verificações | `/oxe-plan` |
29
+ | `execute` | Padrões de falha na implementação, hipóteses erradas | `/oxe-execute` |
30
+ | `verify` | Critérios vagos, evidências insuficientes, camadas puladas | `/oxe-verify` |
31
+ | `process` | Escolha errada de workflow (quick vs spec, solo vs agents) | `/oxe-scan`, qualquer entry |
32
+ | `agents` | Problemas de orquestração, runId, dependências de agente | `/oxe-plan-agent`, `/oxe-execute` |
33
+
34
+ **Formato de lição (prescritivo, não descritivo):**
35
+ - ❌ "A tarefa T4 demorou muito" (descritivo — não ajuda no próximo ciclo)
36
+ - ✅ "Tarefas com integração de terceiros devem ter Complexidade L mínimo + Verificar com mock fallback" (prescritivo — o próximo plan pode aplicar)
37
+ </taxonomy>
38
+
39
+ <process>
40
+ 1. Ler **`.oxe/VERIFY.md`** se existir: identificar tarefas que falharam, critérios A* sem evidência, gaps documentados.
41
+ 2. Ler **`.oxe/FORENSICS.md`** se existir: capturar causa raiz de falhas de execução.
42
+ 3. Ler **`.oxe/SUMMARY.md`** se existir: capturar contexto de replans e decisões forçadas.
43
+ 4. Ler **`.oxe/STATE.md`**: capturar número de ondas, execute_mode usado, se houve loop, se houve escalação para forensics.
44
+ 5. Sintetizar **3–5 lições prescritivas** (não mais — qualidade sobre quantidade):
45
+ - Cada lição responde: "O que o próximo ciclo deve fazer diferente?"
46
+ - Formato: **Lição** (o que fazer) + **Raiz** (por que isso aconteceu) + **Tipo** + **Aplicar em**
47
+ 6. Determinar o próximo **ciclo ID** (C-NN) lendo `.oxe/LESSONS.md` existente ou começando em C-01.
48
+ 7. Criar ou atualizar **`.oxe/LESSONS.md`** usando `oxe/templates/LESSONS.template.md`:
49
+ - Adicionar linha na tabela de índice (mais recente primeiro).
50
+ - Adicionar seção `### C-NN` com as lições sintetizadas.
51
+ - **Nunca apagar** entradas anteriores — só mudar `Status: resolvido` se a lição foi superada.
52
+ 8. Atualizar **`.oxe/STATE.md`**: campo `last_retro: YYYY-MM-DD`.
53
+ 9. Responder no chat: ID do ciclo (C-NN), número de lições registradas, lição mais crítica em 1 frase, sugestão do próximo ciclo (`/oxe-scan` ou `/oxe-spec`).
54
+ </process>
55
+
56
+ <success_criteria>
57
+ - [ ] `.oxe/LESSONS.md` existe com entrada C-NN na tabela e seção de detalhe.
58
+ - [ ] Cada lição é prescritiva (diz o que fazer) não descritiva (não é só o que aconteceu).
59
+ - [ ] 3–5 lições por ciclo — não um dump completo de eventos.
60
+ - [ ] `STATE.md` tem `last_retro` atualizado.
61
+ - [ ] Entradas anteriores preservadas; apenas `Status` pode mudar.
62
+ </success_criteria>
@@ -1,61 +1,61 @@
1
- # OXE — Workflow: security (auditoria de segurança)
2
-
3
- <objective>
4
- Produzir **`.oxe/SECURITY.md`**: auditoria de segurança do repositório focada nas categorias OWASP Top 10 **relevantes** ao stack do projeto. Complementa **`validate-gaps`** (cobertura de testes) com uma camada de segurança aplicativa.
5
-
6
- Pode ser chamado standalone ou como Camada 5 do **`verify.md`** quando `config.json` tiver `"security_in_verify": true`.
7
-
8
- Não substitui ferramentas de análise estática (SAST) — identifica padrões de risco no código e na configuração a partir do contexto disponível no repositório.
9
- </objective>
10
-
11
- <context>
12
- - **Fonte de stack:** `.oxe/codebase/STACK.md` determina quais categorias OWASP são pertinentes (ex.: app sem DB descarta A03:Injection-SQL; API sem auth descarta A07:Authentication).
13
- - **Fontes de código:** `.oxe/codebase/STRUCTURE.md`, `.oxe/codebase/CONCERNS.md`, `.oxe/codebase/INTEGRATIONS.md` orientam quais arquivos focar.
14
- - **Severidade:** P0 = crítico (exploração provável, impacto direto), P1 = alto (requer mitigação antes do próximo deploy), P2 = médio (risco aceitável com compensação documentada).
15
- - **Saída de tarefas:** recomendações vinculadas a `Tn` existentes no PLAN.md (se disponível) ou como sugestões de novas tarefas `T_new`.
16
- - **Integração com verify:** se `security_in_verify: true` em `.oxe/config.json`, o workflow `verify.md` inclui referência a este output como Camada 5. O `security.md` continua sendo o workflow canônico.
17
- - **Não alterar código:** apenas auditar e registrar achados. Nenhum arquivo de código é modificado.
18
- </context>
19
-
20
- <owasp_scope>
21
- ## Mapeamento OWASP → Stack
22
-
23
- Antes de auditar, determinar quais categorias se aplicam lendo `STACK.md` e `INTEGRATIONS.md`:
24
-
25
- | Categoria OWASP | Aplicável quando |
26
- |-----------------|-----------------|
27
- | A01 — Broken Access Control | App com autenticação/autorização ou rotas protegidas |
28
- | A02 — Cryptographic Failures | Dados sensíveis em trânsito ou em repouso; senhas; tokens |
29
- | A03 — Injection | DB queries, shell commands, parsers de entrada, templates |
30
- | A04 — Insecure Design | Ausência de modelagem de ameaças; fluxos de negócio sem validação |
31
- | A05 — Security Misconfiguration | Config de servidor, CORS, headers HTTP, variáveis de ambiente |
32
- | A06 — Vulnerable Components | Dependências com CVEs conhecidos; versões sem suporte |
33
- | A07 — Authentication Failures | Login, sessão, JWT, OAuth, tokens de reset |
34
- | A08 — Software Integrity | Supply chain; checksums; CI/CD sem verificação |
35
- | A09 — Logging & Monitoring | Ausência de logs de eventos críticos; dados sensíveis em logs |
36
- | A10 — SSRF | Requisições a URLs controladas pelo usuário; fetch/proxy interno |
37
-
38
- **Selecionar apenas as categorias aplicáveis** ao stack identificado. Listar explicitamente as ignoradas e o motivo.
39
- </owasp_scope>
40
-
41
- <process>
42
- 1. Ler `.oxe/codebase/STACK.md`, `.oxe/codebase/STRUCTURE.md`, `.oxe/codebase/INTEGRATIONS.md`, `.oxe/codebase/CONCERNS.md`.
43
- 2. Selecionar categorias OWASP aplicáveis ao stack (ver `<owasp_scope>`); registrar as descartadas.
44
- 3. Para cada categoria aplicável:
45
- a. Identificar **arquivos críticos** (auth, input handlers, DB queries, configs, env, deps).
46
- b. Ler os arquivos relevantes (Glob, Grep, Read) procurando padrões de risco.
47
- c. Registrar achados com: localização (`path:linha`), padrão encontrado, severidade (P0/P1/P2), recomendação.
48
- 4. Ler `.oxe/PLAN.md` se existir — vincular achados P0/P1 a tarefas `Tn` existentes quando possível, ou criar sugestão `T_new`.
49
- 5. Escrever `.oxe/SECURITY.md` a partir de `oxe/templates/SECURITY.template.md`.
50
- 6. Atualizar `.oxe/STATE.md`: nota de segurança (ex.: `security_audit: YYYY-MM-DD | P0:N | P1:N | P2:N`).
51
- 7. Responder no chat: total de achados por severidade, arquivos mais críticos identificados, próximo passo (P0 presentes → bloquear deploy; apenas P2 → ação opcional).
52
- </process>
53
-
54
- <success_criteria>
55
- - [ ] `.oxe/SECURITY.md` existe com categorias OWASP selecionadas e justificativa de descarte.
56
- - [ ] Cada achado tem: localização, padrão, severidade, recomendação.
57
- - [ ] Categorias sem achados registradas como "nenhum achado nesta categoria".
58
- - [ ] Achados P0/P1 vinculados a `Tn` existente ou sugestão `T_new`.
59
- - [ ] Nenhum arquivo de código foi modificado.
60
- - [ ] STATE.md tem linha `security_audit` com data e contagem de achados.
61
- </success_criteria>
1
+ # OXE — Workflow: security (auditoria de segurança)
2
+
3
+ <objective>
4
+ Produzir **`.oxe/SECURITY.md`**: auditoria de segurança do repositório focada nas categorias OWASP Top 10 **relevantes** ao stack do projeto. Complementa **`validate-gaps`** (cobertura de testes) com uma camada de segurança aplicativa.
5
+
6
+ Pode ser chamado standalone ou como Camada 5 do **`verify.md`** quando `config.json` tiver `"security_in_verify": true`.
7
+
8
+ Não substitui ferramentas de análise estática (SAST) — identifica padrões de risco no código e na configuração a partir do contexto disponível no repositório.
9
+ </objective>
10
+
11
+ <context>
12
+ - **Fonte de stack:** `.oxe/codebase/STACK.md` determina quais categorias OWASP são pertinentes (ex.: app sem DB descarta A03:Injection-SQL; API sem auth descarta A07:Authentication).
13
+ - **Fontes de código:** `.oxe/codebase/STRUCTURE.md`, `.oxe/codebase/CONCERNS.md`, `.oxe/codebase/INTEGRATIONS.md` orientam quais arquivos focar.
14
+ - **Severidade:** P0 = crítico (exploração provável, impacto direto), P1 = alto (requer mitigação antes do próximo deploy), P2 = médio (risco aceitável com compensação documentada).
15
+ - **Saída de tarefas:** recomendações vinculadas a `Tn` existentes no PLAN.md (se disponível) ou como sugestões de novas tarefas `T_new`.
16
+ - **Integração com verify:** se `security_in_verify: true` em `.oxe/config.json`, o workflow `verify.md` inclui referência a este output como Camada 5. O `security.md` continua sendo o workflow canônico.
17
+ - **Não alterar código:** apenas auditar e registrar achados. Nenhum arquivo de código é modificado.
18
+ </context>
19
+
20
+ <owasp_scope>
21
+ ## Mapeamento OWASP → Stack
22
+
23
+ Antes de auditar, determinar quais categorias se aplicam lendo `STACK.md` e `INTEGRATIONS.md`:
24
+
25
+ | Categoria OWASP | Aplicável quando |
26
+ |-----------------|-----------------|
27
+ | A01 — Broken Access Control | App com autenticação/autorização ou rotas protegidas |
28
+ | A02 — Cryptographic Failures | Dados sensíveis em trânsito ou em repouso; senhas; tokens |
29
+ | A03 — Injection | DB queries, shell commands, parsers de entrada, templates |
30
+ | A04 — Insecure Design | Ausência de modelagem de ameaças; fluxos de negócio sem validação |
31
+ | A05 — Security Misconfiguration | Config de servidor, CORS, headers HTTP, variáveis de ambiente |
32
+ | A06 — Vulnerable Components | Dependências com CVEs conhecidos; versões sem suporte |
33
+ | A07 — Authentication Failures | Login, sessão, JWT, OAuth, tokens de reset |
34
+ | A08 — Software Integrity | Supply chain; checksums; CI/CD sem verificação |
35
+ | A09 — Logging & Monitoring | Ausência de logs de eventos críticos; dados sensíveis em logs |
36
+ | A10 — SSRF | Requisições a URLs controladas pelo usuário; fetch/proxy interno |
37
+
38
+ **Selecionar apenas as categorias aplicáveis** ao stack identificado. Listar explicitamente as ignoradas e o motivo.
39
+ </owasp_scope>
40
+
41
+ <process>
42
+ 1. Ler `.oxe/codebase/STACK.md`, `.oxe/codebase/STRUCTURE.md`, `.oxe/codebase/INTEGRATIONS.md`, `.oxe/codebase/CONCERNS.md`.
43
+ 2. Selecionar categorias OWASP aplicáveis ao stack (ver `<owasp_scope>`); registrar as descartadas.
44
+ 3. Para cada categoria aplicável:
45
+ a. Identificar **arquivos críticos** (auth, input handlers, DB queries, configs, env, deps).
46
+ b. Ler os arquivos relevantes (Glob, Grep, Read) procurando padrões de risco.
47
+ c. Registrar achados com: localização (`path:linha`), padrão encontrado, severidade (P0/P1/P2), recomendação.
48
+ 4. Ler `.oxe/PLAN.md` se existir — vincular achados P0/P1 a tarefas `Tn` existentes quando possível, ou criar sugestão `T_new`.
49
+ 5. Escrever `.oxe/SECURITY.md` a partir de `oxe/templates/SECURITY.template.md`.
50
+ 6. Atualizar `.oxe/STATE.md`: nota de segurança (ex.: `security_audit: YYYY-MM-DD | P0:N | P1:N | P2:N`).
51
+ 7. Responder no chat: total de achados por severidade, arquivos mais críticos identificados, próximo passo (P0 presentes → bloquear deploy; apenas P2 → ação opcional).
52
+ </process>
53
+
54
+ <success_criteria>
55
+ - [ ] `.oxe/SECURITY.md` existe com categorias OWASP selecionadas e justificativa de descarte.
56
+ - [ ] Cada achado tem: localização, padrão, severidade, recomendação.
57
+ - [ ] Categorias sem achados registradas como "nenhum achado nesta categoria".
58
+ - [ ] Achados P0/P1 vinculados a `Tn` existente ou sugestão `T_new`.
59
+ - [ ] Nenhum arquivo de código foi modificado.
60
+ - [ ] STATE.md tem linha `security_audit` com data e contagem de achados.
61
+ </success_criteria>
@@ -20,6 +20,7 @@ Ler no início:
20
20
  - `.oxe/STATE.md` — fase atual, decisões, workstream ativo
21
21
  - `.oxe/codebase/OVERVIEW.md` e `STACK.md` se existirem — não contradizer o repo
22
22
  - **`.oxe/OBSERVATIONS.md`** — se houver entradas `pendente` com impacto `spec` ou `all`, incorporá-las na Fase 3 (Requisitos) e marcá-las `incorporada → spec (data)` após uso
23
+ - **`.oxe/LESSONS.md`** — se existir, ler entradas com `Aplicar em: spec` e status `ativo`. Usar como restrições explícitas ou alertas durante a Fase 1 (perguntas) e Fase 3 (requisitos). Exemplo: se uma lição diz "perguntar explicitamente sobre integração com X", adicionar essa pergunta no Bloco B da Fase 1.
23
24
 
24
25
  **Brownfield (COBOL, JCL, copybooks, VB6, SP):** quando o objetivo for documentar ou planear migração, ver **`oxe/workflows/references/legacy-brownfield.md`** — épicos por trilha, critérios A* verificáveis por Grep/leitura/checklist.
25
26
 
@@ -137,6 +138,30 @@ spec_ref: .oxe/SPEC.md
137
138
  ```
138
139
  </fase_4_roteiro>
139
140
 
141
+ <auto_reflexao>
142
+ ## Auto-reflexão semântica (executa automaticamente antes da Fase 5)
143
+
144
+ **Objetivo:** o agente critica a própria spec antes de apresentá-la ao usuário. Sem requisição extra — é um passe interno de qualidade semântica.
145
+
146
+ Percorrer esta lista de verificação:
147
+
148
+ | # | Verificação | Ação se falhar |
149
+ |---|-------------|----------------|
150
+ | 1 | **Contradições:** algum requisito v1 contradiz diretamente uma resposta da Fase 1? (ex.: usuário disse "sem auth" mas R4 implica sessões) | Voltar à Fase 3 e corrigir o requisito |
151
+ | 2 | **Verificabilidade:** todo critério A* tem "Como verificar" executável sem acesso ao ambiente de produção do usuário? | Refinar para verificação possível no CI/agente ou marcar "verificação manual necessária" |
152
+ | 3 | **Escopo creep:** algum requisito v1 foi adicionado que NÃO emergiu da Fase 1 nem da Fase 2? | Mover para v2 ou justificar inclusão em v1 |
153
+ | 4 | **Conflito com stack:** algum requisito v1 pressupõe tecnologia ou capacidade que `STACK.md` indica ausente? (ex.: requer WebSocket mas stack usa REST puro) | Marcar como suposição explícita ou remover |
154
+ | 5 | **Critérios vagos:** algum A* usa linguagem não-mensurável ("deve ser rápido", "interface amigável") sem métrica? | Refinar: "resposta < 200ms p95", "WCAG 2.1 AA" |
155
+ | 6 | **Dependências implícitas:** algum requisito v1 pressupõe que outro requisito (v2 ou fora) já esteja implementado? | Tornar dependência explícita ou reordenar versioning |
156
+
157
+ **Resultado obrigatório antes de avançar:**
158
+ - **0 problemas** → avançar para Fase 5 normalmente.
159
+ - **1–2 problemas** → corrigir inline na spec, anotar o que foi ajustado em 1 linha.
160
+ - **3+ problemas** → apresentar lista ao usuário com a Fase 3 revisada (não reiniciar do zero).
161
+
162
+ O resultado desta reflexão é **invisível ao usuário** — é trabalho interno do agente. Somente os ajustes feitos aparecem na spec final.
163
+ </auto_reflexao>
164
+
140
165
  <fase_5_aprovacao>
141
166
  ## Fase 5 — Aprovação e próximo passo
142
167
 
@@ -176,6 +201,7 @@ spec_ref: .oxe/SPEC.md
176
201
  - Frontmatter YAML (`oxe_doc: spec`, `status`, `updated`, `inputs`)
177
202
  - Objetivo, Escopo (dentro/fora), Critérios de aceite (tabela A*), Suposições e riscos, Referências
178
203
  - Preservar chaves existentes se SPEC.md já existir; atualizar `updated:`
204
+ 6b. **Auto-reflexão:** executar integralmente o bloco `<auto_reflexao>` antes de avançar. Corrigir a spec conforme necessário. Não apresentar a lista de verificação ao usuário — apenas a spec corrigida.
179
205
  7. **Fase 5 — Aprovação:** apresentar resumo, aguardar aprovação do roteiro, redirecionar.
180
206
  8. Atualizar **`.oxe/STATE.md`**: `phase: spec_ready`, próximo passo.
181
207
  9. Marcar OBS incorporadas em `.oxe/OBSERVATIONS.md` se houver pendentes de impacto `spec`.
@@ -87,8 +87,9 @@ O preenchimento da checklist é responsabilidade do **usuário** (não do agente
87
87
  - **Checklist UAT** (Camada 4).
88
88
  - **Gaps** — o que falhou e sugestão de correção; se não houver, escrever `Nenhum gap restante`.
89
89
  6. Atualizar **`.oxe/STATE.md`**: `verify_complete` ou `verify_failed` + próximo passo (replan, corrigir ou publicar).
90
- 6b. **Blueprint plan-agent:** se **todas** as verificações relevantes **passaram**, existir **`.oxe/plan-agents.json`** com `oxePlanAgentsSchema === 2` e `lifecycle.status === "executing"` (ou `pending_execute`), actualizar o JSON: `lifecycle: { "status": "closed", "since": "<ISO>" }` e espelhar em **`STATE.md`** (**lifecycle_status** → `closed`). Não fechar como `closed` se `verify_failed` ou gaps por resolver.
90
+ 6b. **Blueprint plan-agent:** se **todas** as verificações relevantes **passaram**, existir **`.oxe/plan-agents.json`** com `oxePlanAgentsSchema >= 2` e `lifecycle.status === "executing"` (ou `pending_execute`), actualizar o JSON: `lifecycle: { "status": "closed", "since": "<ISO>" }` e espelhar em **`STATE.md`** (**lifecycle_status** → `closed`). Não fechar como `closed` se `verify_failed` ou gaps por resolver.
91
91
  7. Acrescentar entrada em **`.oxe/SUMMARY.md`** (sessão): se não existir, criar a partir de **`oxe/templates/SUMMARY.template.md`**. **Obrigatório** quando `verify_failed` ou quando a seção **Gaps** tiver itens.
92
+ 7b. **Retrospectiva (pós-verify):** se `verify_complete`, sugerir **`/oxe-retro`** para capturar aprendizados do ciclo em `.oxe/LESSONS.md`. Especialmente importante quando: houve replanejamento (`--replan`), houve falhas em execute que precisaram de debug, critérios A* foram ajustados durante o ciclo, ou o ciclo durou mais de 2 ondas. Retro antes do próximo spec garante que lições orientem o próximo ciclo.
92
93
  7b. **Camada 5 — Validate-gaps automático:** se `verification_depth: "thorough"` em `.oxe/config.json`, executar a lógica de `oxe/workflows/validate-gaps.md` e adicionar seção **Gaps de Cobertura** ao VERIFY.md (mesmo conteúdo de VALIDATION-GAPS.md). Também escrever `.oxe/VALIDATION-GAPS.md` separado.
93
94
  7c. **Camada 6 — Security automático:** se `security_in_verify: true` em `.oxe/config.json`, executar a lógica de `oxe/workflows/security.md` e adicionar seção **Auditoria de Segurança** ao VERIFY.md. Também escrever `.oxe/SECURITY.md` separado. Achados P0 bloqueiam o `verify_complete` — registrar `verify_failed` até P0s serem resolvidos.
94
95
  8. **Só se todas as verificações relevantes passarem:** se `after_verify_draft_commit` não for `false`: acrescentar em **VERIFY.md** a seção **Rascunho de commit** — mensagem convencional (ex.: `feat:` / `fix:`) + bullets alinhados aos critérios **A*** e decisões **D-NN**; **não** incluir segredos.
@@ -103,4 +104,6 @@ O preenchimento da checklist é responsabilidade do **usuário** (não do agente
103
104
  - [ ] SUMMARY.md atualizado quando houver falha ou gaps relevantes.
104
105
  - [ ] Se passou: seções **Rascunho de commit** e **Checklist PR** presentes em VERIFY.md, salvo se desativadas na config.
105
106
  - [ ] Se existiu DISCUSS.md: tabela de Fidelidade de decisões preenchida sem divergências não documentadas.
107
+ - [ ] Se `verification_depth: "thorough"` em config: `.oxe/VALIDATION-GAPS.md` produzido como parte deste verify.
108
+ - [ ] Se `security_in_verify: true` em config: `.oxe/SECURITY.md` produzido; achados P0 resolvidos ou `verify_failed` registrado.
106
109
  </success_criteria>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxe-cc",
3
- "version": "0.6.0",
3
+ "version": "0.6.4",
4
4
  "description": "OXE — spec-driven workflows in .oxe/; integrates with Cursor, GitHub Copilot, Claude, OpenCode, Gemini, Codex, Windsurf, Antigravity (npx)",
5
5
  "license": "GPL-3.0",
6
6
  "author": "",
@@ -54,7 +54,7 @@
54
54
  ],
55
55
  "scripts": {
56
56
  "sync:cursor": "node scripts/sync-cursor-from-prompts.cjs",
57
- "test": "node --test tests/install.test.cjs tests/oxe-project-health.test.cjs tests/oxe-sdk.test.cjs tests/oxe-manifest.test.cjs tests/oxe-agent-install.test.cjs tests/oxe-install-resolve-full.test.cjs tests/oxe-health-extended.test.cjs tests/oxe-workflows-edge.test.cjs tests/oxe-sdk-edge.test.cjs tests/oxe-cli-edge.test.cjs tests/oxe-npm-version.test.cjs tests/oxe-scripts.test.cjs",
57
+ "test": "node --test tests/install.test.cjs tests/oxe-project-health.test.cjs tests/oxe-sdk.test.cjs tests/oxe-manifest.test.cjs tests/oxe-agent-install.test.cjs tests/oxe-install-resolve-full.test.cjs tests/oxe-health-extended.test.cjs tests/oxe-workflows-edge.test.cjs tests/oxe-sdk-edge.test.cjs tests/oxe-cli-edge.test.cjs tests/oxe-npm-version.test.cjs tests/oxe-scripts.test.cjs tests/oxe-retro-health.test.cjs",
58
58
  "test:coverage": "c8 --check-coverage --lines 82 --functions 85 --branches 58 --statements 82 npm test",
59
59
  "scan:assets": "node scripts/oxe-assets-scan.cjs",
60
60
  "prepublishOnly": "node scripts/sync-cursor-from-prompts.cjs && npm test && npm run scan:assets && node bin/oxe-cc.js --version"