oxe-cc 0.6.2 → 0.6.5

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 (60) hide show
  1. package/.cursor/commands/oxe-execute.md +1 -1
  2. package/.cursor/commands/oxe-session.md +11 -0
  3. package/.github/prompts/oxe-execute.prompt.md +1 -1
  4. package/.github/prompts/oxe-loop.prompt.md +12 -12
  5. package/.github/prompts/oxe-project.prompt.md +12 -12
  6. package/.github/prompts/oxe-retro.prompt.md +12 -12
  7. package/.github/prompts/oxe-security.prompt.md +12 -12
  8. package/.github/prompts/oxe-session.prompt.md +12 -0
  9. package/.github/prompts/oxe.prompt.md +12 -12
  10. package/AGENTS.md +75 -8
  11. package/CHANGELOG.md +74 -0
  12. package/README.md +81 -60
  13. package/bin/banner.txt +1 -1
  14. package/bin/lib/oxe-project-health.cjs +82 -0
  15. package/bin/oxe-cc.js +13 -1
  16. package/commands/oxe/loop.md +17 -17
  17. package/commands/oxe/oxe.md +16 -16
  18. package/commands/oxe/project.md +16 -16
  19. package/commands/oxe/retro.md +16 -16
  20. package/commands/oxe/review-pr.md +16 -0
  21. package/commands/oxe/security.md +16 -16
  22. package/commands/oxe/session.md +16 -0
  23. package/commands/oxe/update.md +16 -0
  24. package/lib/sdk/index.cjs +22 -1
  25. package/lib/sdk/index.d.ts +28 -2
  26. package/oxe/schemas/plan-agents.schema.json +15 -4
  27. package/oxe/templates/CONFIG.md +6 -1
  28. package/oxe/templates/LESSONS.template.md +43 -43
  29. package/oxe/templates/SECURITY.template.md +72 -72
  30. package/oxe/templates/SESSION.template.md +32 -0
  31. package/oxe/templates/STATE.md +29 -6
  32. package/oxe/templates/config.template.json +2 -0
  33. package/oxe/templates/plan-agents.template.json +1 -0
  34. package/oxe/workflows/checkpoint.md +10 -9
  35. package/oxe/workflows/debug.md +6 -5
  36. package/oxe/workflows/discuss.md +8 -7
  37. package/oxe/workflows/execute.md +14 -12
  38. package/oxe/workflows/forensics.md +6 -6
  39. package/oxe/workflows/help.md +21 -4
  40. package/oxe/workflows/loop.md +57 -57
  41. package/oxe/workflows/milestone.md +12 -13
  42. package/oxe/workflows/next.md +9 -5
  43. package/oxe/workflows/obs.md +19 -8
  44. package/oxe/workflows/oxe.md +115 -115
  45. package/oxe/workflows/plan-agent.md +4 -3
  46. package/oxe/workflows/plan.md +17 -16
  47. package/oxe/workflows/project.md +50 -50
  48. package/oxe/workflows/quick.md +6 -5
  49. package/oxe/workflows/references/session-path-resolution.md +71 -0
  50. package/oxe/workflows/research.md +9 -8
  51. package/oxe/workflows/retro.md +62 -62
  52. package/oxe/workflows/security.md +59 -58
  53. package/oxe/workflows/session.md +153 -0
  54. package/oxe/workflows/spec.md +26 -20
  55. package/oxe/workflows/ui-review.md +3 -3
  56. package/oxe/workflows/ui-spec.md +3 -3
  57. package/oxe/workflows/validate-gaps.md +5 -4
  58. package/oxe/workflows/verify.md +12 -9
  59. package/oxe/workflows/workstream.md +16 -15
  60. package/package.json +2 -2
@@ -3,24 +3,25 @@
3
3
  <objective>
4
4
  Produzir **`.oxe/PLAN.md`**: tarefas **pequenas**, **ondas** (paralelizáveis vs sequenciais), e **cada tarefa com bloco de verificação** (comando de teste e/ou checklist manual).
5
5
 
6
- Base: `.oxe/SPEC.md` (critérios com IDs **A1**, **A2**, …) + `.oxe/codebase/*` + código quando necessário (Grep/Read pontual).
6
+ Base: `SPEC.md` do escopo resolvido da sessão (critérios com IDs **A1**, **A2**, …) + `.oxe/codebase/*` + código quando necessário (Grep/Read pontual).
7
7
 
8
8
  Se o usuário pedir **--replan** (ou replanejamento implícito após `verify_failed`):
9
- - Ler **`.oxe/VERIFY.md`** (gaps e falhas), **`.oxe/SUMMARY.md`** se existir, e o **PLAN.md** atual.
9
+ - Ler `VERIFY.md` e `SUMMARY.md` do escopo resolvido, e o `PLAN.md` atual.
10
10
  - Preservar tarefas já concluídas ou renumerar com nota em **Replanejamento**; não apagar histórico útil — deslocar para a seção **Replanejamento** e reescrever **Tarefas** conforme necessário.
11
11
  - Se **SUMMARY.md** não existir, criar a partir de `oxe/templates/SUMMARY.template.md` para registrar o contexto do replan (ou dar append se já existir).
12
12
  </objective>
13
13
 
14
- <context>
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: ... -->`.
14
+ <context>
15
+ - Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa, o plano vive em `.oxe/<active_session>/plan/` e a spec em `.oxe/<active_session>/spec/`.
16
+ - Se existir `OBSERVATIONS.md` do escopo resolvido 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)`.
17
+ - Se existir **`.oxe/global/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
18
  - **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.
18
19
  - 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).
19
20
  - 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*.
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**.
21
- - Se existir **`.oxe/DISCUSS.md`**, alinhar tarefas às decisões registradas. Referenciar IDs **D-NN** no campo **Decisão vinculada:** de cada tarefa impactada — se nenhuma decisão impactar a tarefa, omitir o campo. A rastreabilidade D-NN → Tn → verify é usada pela seção **Fidelidade de decisões** do verify.
22
- - Se existir **`.oxe/RESEARCH.md`** e notas em **`.oxe/research/*.md`**, ler o índice e as notas cujo **Tema** cruza o âmbito do plano (ou as mais recentes relevantes). Se o índice marcar **Estado** pendente em tópico bloqueante, pedir nova sessão **research** ou **discuss**, ou registar **suposição explícita** no PLAN antes de ondas que dependam dessa decisão.
23
- - Se existir **`.oxe/plan-agents.json`** (gerado por **`/oxe-plan-agent`**), um **--replan** ou renumerar tarefas deve **atualizar o JSON em conjunto** com o `PLAN.md` (cobertura `taskIds`, ondas e dependências entre agentes) — ver **`oxe/workflows/plan-agent.md`**. Preferir **`/oxe-plan-agent --replan`** para regerar **`runId`**, **`lifecycle`** (`pending_execute`) e alinhar **STATE.md**; se só **`/oxe-plan`** for usado, ou o JSON fica manualmente sincronizado, ou marcar no JSON `lifecycle.invalidatedBy: new_plan` até novo plan-agent.
21
+ - Se existir `UI-SPEC.md` no escopo resolvido, as tarefas de UI devem referenciar secções do UI-SPEC no texto de **Implementação** ou **Verificar**.
22
+ - Se existir `DISCUSS.md` no escopo resolvido, alinhar tarefas às decisões registradas. Referenciar IDs **D-NN** no campo **Decisão vinculada:** de cada tarefa impactada — se nenhuma decisão impactar a tarefa, omitir o campo. A rastreabilidade D-NN → Tn → verify é usada pela seção **Fidelidade de decisões** do verify.
23
+ - Se existir `RESEARCH.md` e notas em `research/*.md` do escopo resolvido, ler o índice e as notas cujo **Tema** cruza o âmbito do plano (ou as mais recentes relevantes). Se o índice marcar **Estado** pendente em tópico bloqueante, pedir nova sessão **research** ou **discuss**, ou registar **suposição explícita** no PLAN antes de ondas que dependam dessa decisão.
24
+ - Se existir `plan-agents.json` no escopo resolvido (gerado por **`/oxe-plan-agent`**), um **--replan** ou renumerar tarefas deve **atualizar o JSON em conjunto** com o `PLAN.md` (cobertura `taskIds`, ondas e dependências entre agentes) — ver **`oxe/workflows/plan-agent.md`**. Preferir **`/oxe-plan-agent --replan`** para regerar **`runId`**, **`lifecycle`** (`pending_execute`) e alinhar **STATE.md**; se só **`/oxe-plan`** for usado, ou o JSON fica manualmente sincronizado, ou marcar no JSON `lifecycle.invalidatedBy: new_plan` até novo plan-agent.
24
25
  - Se existirem **`.oxe/CODEBASE-DELTA.md`** e/ou **`.oxe/RESUME.md`** (tipicamente após **`/oxe-compact`**), ler **antes** de detalhar tarefas: o delta resume o que mudou nos mapas face ao código; o RESUME ancora fase e trilha OXE — **não** substituem SPEC nem os sete ficheiros em `codebase/`.
25
26
  - Se existir **`.oxe/config.json`** com `default_verify_command` não vazio, usar como fallback quando a SPEC não indicar comando.
26
27
  - Se existir **`plan_max_tasks_per_wave` > 0** na config, **não** colocar mais tarefas do que esse número na mesma **Onda**; dividir em mais ondas.
@@ -66,11 +67,11 @@ Antes de finalizar a resposta ao utilizador, o agente **deve** percorrer este ga
66
67
 
67
68
  1. **Depende de:** em cada `### Tn`, apenas IDs `Tk` que existem no mesmo ficheiro, ou `—`.
68
69
  2. **Ciclos:** não há cadeia circular óbvia (ex.: T2→T3→T2); se houver, quebrar dependência ou onda.
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.
70
+ 3. **Cobertura A*:** todos os IDs da tabela de critérios em `SPEC.md` do escopo resolvido aparecem em **Aceite vinculado:** de alguma tarefa, ou há nota explícita de **gap** no PLAN (fora de âmbito / adiado) por ID.
70
71
  4. **Ondas:** cada número de **Onda:** usado tem pelo menos uma tarefa; sem ondas vazias.
71
72
  5. **`plan_max_tasks_per_wave`:** se `.oxe/config.json` tiver valor **> 0**, contar tarefas por **Onda**; nenhuma onda excede o limite.
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.
73
+ 6. **UI-SPEC:** se existir `UI-SPEC.md` no escopo resolvido, toda tarefa cuja **Implementar** ou **Verificar** toque UI deve citar **secção § do UI-SPEC** ou path explícito.
74
+ 7. **Fidelidade de decisões:** se existir `DISCUSS.md` com IDs **D-NN** no escopo resolvido, 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
75
  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
76
  9. **Test-first:** em toda tarefa, `Verificar` deve preceder `Implementar` no texto. Se a ordem estiver invertida, corrigir antes de finalizar.
76
77
 
@@ -80,14 +81,14 @@ Resumo obrigatório no chat: `Gate do plano: OK` ou `Gate do plano: corrigido (N
80
81
  </plan_quality_gate>
81
82
 
82
83
  <process>
83
- 1. Ler `.oxe/SPEC.md` (obrigatório). Se faltar, pedir **spec** primeiro.
84
- 2. Se `.oxe/config.json` tiver `discuss_before_plan: true` e **não** existir `.oxe/DISCUSS.md` com decisões fechadas, pedir **discuss** antes de planejar.
84
+ 1. Resolver `active_session` e ler `SPEC.md` do escopo correto (obrigatório). Se faltar, pedir **spec** primeiro.
85
+ 2. Se `.oxe/config.json` tiver `discuss_before_plan: true` e **não** existir `DISCUSS.md` no escopo resolvido com decisões fechadas, pedir **discuss** antes de planejar.
85
86
  3. Se existir **`.oxe/NOTES.md`**, consumir ou explicitamente adiar cada bullet relevante (ver **context**).
86
87
  4. Ler `.oxe/codebase/*.md` (incl. CONVENTIONS / CONCERNS) e inspecionar pontos de entrada se a spec exigir.
87
- 5. Escrever ou atualizar `.oxe/PLAN.md` usando `oxe/templates/PLAN.template.md` como cabeçalho; **preservar** YAML inicial (`oxe_doc: plan`, `status`, `inputs`) se já existir e **atualizar** `updated:` (ISO); em **--replan**, preencher a seção **Replanejamento** (data, motivo, lições de VERIFY/SUMMARY, tarefas removidas/alteradas).
88
+ 5. Escrever ou atualizar `PLAN.md` no escopo resolvido usando `oxe/templates/PLAN.template.md` como cabeçalho; **preservar** YAML inicial (`oxe_doc: plan`, `status`, `inputs`) se já existir e **atualizar** `updated:` (ISO); em **--replan**, preencher a seção **Replanejamento** (data, motivo, lições de VERIFY/SUMMARY, tarefas removidas/alteradas).
88
89
  6. Definir ondas: onda 1 = tarefas sem dependência entre si; onda seguinte = dependentes; respeitar `plan_max_tasks_per_wave` se configurado.
89
90
  7. Aplicar integralmente o bloco **`<plan_quality_gate>`** acima ao `PLAN.md` em disco; corrigir o ficheiro até passar ou documentar gaps explícitos.
90
- 8. Atualizar `.oxe/STATE.md`: fase `plan_ready`, próximo passo `oxe:execute` (implementar ondas) e depois `oxe:verify`.
91
+ 8. Atualizar `.oxe/STATE.md` global: fase `plan_ready`, próximo passo `oxe:execute` (implementar ondas) e depois `oxe:verify`.
91
92
  9. **Sugestão de agentes (inteligente):** após o gate passar, verificar se o plano tem 3+ domínios distintos (ex.: backend + frontend + DB, ou auth + notificações + UI). Se sim, sugerir proativamente: "Este plano tem N domínios distintos. Quer gerar um blueprint de agentes com `/oxe-plan --agents`?" — não executar automaticamente, apenas oferecer. Se o usuário incluiu `--agents` no input original, executar imediatamente a lógica de `oxe/workflows/plan-agent.md`.
92
93
  10. Listar no chat: resultado do gate (OK ou corrigido), ondas, contagem de tarefas, comando de teste guarda-chuva se houver.
93
94
  </process>
@@ -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`, `.oxe/global/MILESTONES.md` e `CHECKPOINTS.md` do escopo atual da sessão.
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>
@@ -8,8 +8,9 @@ Quando o trabalho envolve **2 ou mais domínios distintos** (ex.: backend + fron
8
8
  Usar quando: correção pontual, refactor local, feature pequena ou protótipo que **não** justifica critérios de aceite completos.
9
9
  </objective>
10
10
 
11
- <context>
12
- - Ler `.oxe/STATE.md` e, se existirem, `OVERVIEW.md` e `STACK.md` em `.oxe/codebase/` para não contradizer o repo.
11
+ <context>
12
+ - Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa, `QUICK.md` e `quick-agents.json` vivem em `.oxe/<active_session>/plan/`; sem sessão ativa, manter `.oxe/`.
13
+ - Ler `.oxe/STATE.md` e, se existirem, `OVERVIEW.md` e `STACK.md` em `.oxe/codebase/` para não contradizer o repo.
13
14
  - Não apagar `SPEC.md` / `PLAN.md` se existirem; este fluxo é paralelo ou temporário.
14
15
  - **Blueprint plan-agent:** este fluxo **não** reutiliza papéis (`role` / `scope`) de **`.oxe/plan-agents.json`**. Se existir `plan-agents.json` com **`oxePlanAgentsSchema: 2`** e `lifecycle.status` **não** for já `invalidated`, **invalidar** o blueprint após criar/substituir **`QUICK.md`**: `lifecycle: { "status": "invalidated", "since": "<ISO>", "invalidatedBy": "quick", "invalidatedReason": "oxe-quick substitui trilha focada do blueprint" }`. Actualizar **`.oxe/STATE.md`** — secção **Blueprint de agentes (sessão)**: **lifecycle_status** → `invalidated`, nota "invalidado por quick". Não escrever novas mensagens em **`.oxe/plan-agent-messages/`** para o `runId` invalidado.
15
16
  - **Quick-agents anterior:** se existir **`.oxe/quick-agents.json`** com `status` diferente de `done` ou `invalidated`, invalidá-lo antes de criar o novo (`status: "invalidated", "since": "<ISO>", "reason": "novo quick iniciado"`).
@@ -140,16 +141,16 @@ No final de **`.oxe/QUICK.md`**, mantenha a linha:
140
141
  Se **sim**, o próximo passo recomendado no chat é **`/oxe-spec`** (depois discuss/plan conforme config).
141
142
 
142
143
  <process>
143
- 1. Garantir `.oxe/` (usar template de STATE só se `STATE.md` não existir).
144
+ 1. Garantir `.oxe/` (usar template de STATE só se `STATE.md` não existir). Verificar `OBSERVATIONS.md` do escopo resolvido — 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
145
  2. Avaliar se PDDA lean se aplica (ver `<plan_driven_dynamic_agents_lean>` — domínios distintos, 5+ passos, ou flag `--agents`).
145
- 3. Criar ou substituir **`.oxe/QUICK.md`** com:
146
+ 3. Criar ou substituir **`QUICK.md`** no escopo resolvido com:
146
147
  - **Objetivo** — uma frase. *(Esta é a minispec: restringe o escopo de todos os agentes e passos.)*
147
148
  - **Contexto** — 2–5 bullets (arquivos/pastas já vistos).
148
149
  - **Passos** — lista numerada, **máximo 10** passos acionáveis; se PDDA ativo, anotar `<!-- agente: id -->` em cada passo.
149
150
  - **Agentes dinâmicos** *(somente se PDDA ativo)* — tabela com ID, papel, steps, persona.
150
151
  - **Verificar** — pelo menos um: comando de terminal (ex.: `npm test`) **ou** checklist manual explícito. *(Este é o critério de aceite da minispec.)*
151
152
  - **Promover para spec/plan?** — conforme seção acima.
152
- 4. Se PDDA ativo, criar **`.oxe/quick-agents.json`** usando `oxe/templates/quick-agents.template.json`:
153
+ 4. Se PDDA ativo, criar **`quick-agents.json`** no escopo resolvido usando `oxe/templates/quick-agents.template.json`:
153
154
  - Gerar `quickId` novo (`quick-<YYYY-MM-DD>-<6hex>`).
154
155
  - `status: "active"`, `since: "<ISO agora>"`.
155
156
  - Preencher `agents[]` derivando de cada grupo de passos do QUICK.md.
@@ -0,0 +1,71 @@
1
+ # OXE — Referência: Session Path Resolution
2
+
3
+ <objective>
4
+ Padronizar a resolução de caminhos quando o projeto usa **sessões OXE** em `.oxe/sessions/`, preservando o modo legado quando **`.oxe/STATE.md`** não tiver `active_session`.
5
+ </objective>
6
+
7
+ <resolution_rule>
8
+ ## Regra de resolução
9
+
10
+ 1. Ler **`.oxe/STATE.md`** global.
11
+ 2. Procurar o campo **`active_session`** na secção **Sessão ativa**.
12
+ 3. Se existir e tiver valor diferente de `—`, usar:
13
+ - `session_path = .oxe/<active_session>/`
14
+ - `active_session` deve guardar sempre o path relativo completo, por exemplo: `sessions/s001-auth-redesign`
15
+ 4. Se não existir:
16
+ - `session_path = .oxe/`
17
+ - O workflow opera em **modo legado**
18
+
19
+ ## Convenções auxiliares
20
+
21
+ - **global_state_path** = `.oxe/STATE.md`
22
+ - **global_config_path** = `.oxe/config.json`
23
+ - **global_codebase_path** = `.oxe/codebase/`
24
+ - **global_sessions_index_path** = `.oxe/SESSIONS.md`
25
+ - **global_lessons_path** = `.oxe/global/LESSONS.md`
26
+ - **global_milestones_index_path** = `.oxe/global/MILESTONES.md`
27
+ - **global_milestones_dir** = `.oxe/global/milestones/`
28
+ </resolution_rule>
29
+
30
+ <artifact_matrix>
31
+ ## Matriz de artefatos
32
+
33
+ | Tipo | Escopo | Caminho com sessão ativa | Caminho legado |
34
+ |------|--------|--------------------------|----------------|
35
+ | STATE global | global | `.oxe/STATE.md` | `.oxe/STATE.md` |
36
+ | Config | global | `.oxe/config.json` | `.oxe/config.json` |
37
+ | Codebase | global | `.oxe/codebase/*` | `.oxe/codebase/*` |
38
+ | SESSIONS | global | `.oxe/SESSIONS.md` | `.oxe/SESSIONS.md` |
39
+ | LESSONS | global | `.oxe/global/LESSONS.md` | `.oxe/LESSONS.md` |
40
+ | MILESTONES | global | `.oxe/global/MILESTONES.md` | `.oxe/MILESTONES.md` |
41
+ | SPEC / ROADMAP / DISCUSS / UI-SPEC | sessão | `.oxe/<active_session>/spec/` | `.oxe/` |
42
+ | PLAN / QUICK / plan-agents / quick-agents | sessão | `.oxe/<active_session>/plan/` | `.oxe/` |
43
+ | STATE local / OBS / DEBUG / FORENSICS | sessão | `.oxe/<active_session>/execution/` | `.oxe/` |
44
+ | VERIFY / VALIDATION-GAPS / SECURITY / UI-REVIEW | sessão | `.oxe/<active_session>/verification/` | `.oxe/` |
45
+ | CHECKPOINTS | sessão | `.oxe/<active_session>/checkpoints/` | `.oxe/checkpoints/` |
46
+ | RESEARCH | sessão | `.oxe/<active_session>/research/` | `.oxe/research/` |
47
+ | WORKSTREAMS | sessão | `.oxe/<active_session>/workstreams/` | `.oxe/workstreams/` |
48
+ </artifact_matrix>
49
+
50
+ <reading_rule>
51
+ ## Regra de leitura
52
+
53
+ - Quando um workflow ler um artefato da sua trilha, deve tentar primeiro o caminho da sessão ativa.
54
+ - Se não houver sessão ativa, usar o caminho legado.
55
+ - Se houver sessão ativa mas o artefato ainda não existir, o workflow pode:
56
+ - criar no caminho da sessão, se for writer da fase
57
+ - ou fazer fallback de leitura para o legado, quando isso preservar retrocompatibilidade e ajudar numa migração
58
+
59
+ Exemplos:
60
+ - `plan` lê `spec/SPEC.md` da sessão antes de cair para `.oxe/SPEC.md`
61
+ - `verify` lê `plan/PLAN.md` e `spec/SPEC.md` da sessão antes do legado
62
+ - `execute` lê sempre `.oxe/STATE.md` global **antes** de tudo, só para resolver `active_session`
63
+ </reading_rule>
64
+
65
+ <cross_session_refs>
66
+ ## Referências cruzadas
67
+
68
+ - Em `SESSION.md`, referências a outras sessões usam o formato **`@sNNN`**
69
+ - O texto pode complementar com o path, por exemplo: `@s003 ver sessions/s003-auth-hardening/SESSION.md`
70
+ - Não existe sessão múltipla ativa: o formato `@sNNN` é apenas referência documental
71
+ </cross_session_refs>
@@ -1,15 +1,16 @@
1
1
  # OXE — Workflow: research
2
2
 
3
3
  <objective>
4
- Produzir **notas de pesquisa rastreáveis** em **`.oxe/research/YYYY-MM-DD-<slug>.md`** e manter **`.oxe/RESEARCH.md`** como **índice e histórico** (ligações, tipo, estado, resumo). Serve para qualquer incerteza antes de um plano pesado: spikes, comparação de tecnologias, due diligence, requisitos ambíguos, **e** — com profundidade quando pedido — compreensão de **sistemas grandes**, **engenharia reversa / brownfield** e **hipóteses de modernização** (sempre ligadas a evidência ou suposições explícitas).
4
+ Produzir **notas de pesquisa rastreáveis** em `research/YYYY-MM-DD-<slug>.md` do escopo resolvido e manter `RESEARCH.md` correspondente como **índice e histórico** (ligações, tipo, estado, resumo). Serve para qualquer incerteza antes de um plano pesado: spikes, comparação de tecnologias, due diligence, requisitos ambíguos, **e** — com profundidade quando pedido — compreensão de **sistemas grandes**, **engenharia reversa / brownfield** e **hipóteses de modernização** (sempre ligadas a evidência ou suposições explícitas).
5
5
 
6
6
  Não substitui **SPEC** nem **PLAN**; alimenta decisões que depois entram na SPEC ou no PLAN.
7
7
  </objective>
8
8
 
9
9
  <context>
10
- - **Uma sessão = um ficheiro novo** em `.oxe/research/`; não sobrescrever notas antigas salvo correção explícita do utilizador.
10
+ - Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa, research vive em `.oxe/<active_session>/research/`; sem sessão ativa, usar `.oxe/research/`.
11
+ - **Uma sessão = um ficheiro novo** em `research/`; não sobrescrever notas antigas salvo correção explícita do utilizador.
11
12
  - Nome do ficheiro: **`YYYY-MM-DD-<slug-kebab>.md`** (data ISO do dia acordado na mensagem ou data atual; slug único, curto, ASCII preferível).
12
- - **Índice:** `.oxe/RESEARCH.md` deve conter tabela **Histórico** (mais recente primeiro) com colunas: **Data** | **Ficheiro** (`research/...`) | **Tema / âmbito** | **Tipo** (ex.: spike, mapa-sistema, reversa, modernização, decisão) | **Estado** (decidido / pendente / parcial) | **Resumo** (uma linha). Opcional: bloco **Última sessão** no topo com link para a nota mais recente.
13
+ - **Índice:** `RESEARCH.md` do mesmo escopo deve conter tabela **Histórico** (mais recente primeiro) com colunas: **Data** | **Ficheiro** (`research/...`) | **Tema / âmbito** | **Tipo** (ex.: spike, mapa-sistema, reversa, modernização, decisão) | **Estado** (decidido / pendente / parcial) | **Resumo** (uma linha). Opcional: bloco **Última sessão** no topo com link para a nota mais recente.
13
14
  - Preferir **`.oxe/SPEC.md`** existente; se o pedido for mapear/reverter **antes** de spec, criar a nota mesmo assim com **Contexto** a declarar ausência de SPEC e próximo passo `oxe:spec`.
14
15
  - **Progressive disclosure:** sistemas grandes → profundidade por área; várias sessões/notas datadas em vez de um único ficheiro enorme.
15
16
  - Template: **`oxe/templates/RESEARCH.template.md`**.
@@ -33,19 +34,19 @@ Anotar `thinking_depth: surface | standard | deep` no frontmatter da nota de pes
33
34
  </thinking_depth>
34
35
 
35
36
  <process>
36
- 1. Garantir pastas `.oxe/` e `.oxe/research/`.
37
+ 1. Garantir pastas `.oxe/` e `research/` do escopo resolvido.
37
38
  2. Escolher `YYYY-MM-DD-<slug>.md` único; se colisão, acrescentar sufixo ao slug (ex. `-b`).
38
39
  3. Criar a nota a partir de `RESEARCH.template.md`: preencher secções **base**; preencher secções de **reforço** ou marcar **N/A** com justificação curta quando o âmbito for sistema grande, reversa ou modernização.
39
- 4. Se **`.oxe/RESEARCH.md`** não existir, criá-lo com título `# OXE — Índice de pesquisa`, parágrafo introdutório, secção **Histórico** com cabeçalho de tabela e primeira linha.
40
- 5. Se já existir, **atualizar** `RESEARCH.md`: nova linha no topo da tabela **Histórico** (mais recente primeiro); opcionalmente atualizar **Última sessão** com link para o ficheiro novo.
40
+ 4. Se `RESEARCH.md` do escopo resolvido não existir, criá-lo com título `# OXE — Índice de pesquisa`, parágrafo introdutório, secção **Histórico** com cabeçalho de tabela e primeira linha.
41
+ 5. Se já existir, **atualizar** `RESEARCH.md` do escopo resolvido: nova linha no topo da tabela **Histórico** (mais recente primeiro); opcionalmente atualizar **Última sessão** com link para o ficheiro novo.
41
42
  6. Ler **`.oxe/SPEC.md`**, **`.oxe/codebase/*`** e código alvo (Glob/Grep/Read) conforme âmbito.
42
43
  7. Atualizar **`.oxe/STATE.md`**: nota de fase / próximo passo típico `oxe:plan`, ou `oxe:spec` se faltar contrato, ou `oxe:ui-spec` se o foco for UI antes do plano.
43
44
  8. Responder no chat em 5–10 linhas: caminho da nota nova, confirmação de atualização do índice, próximo passo OXE.
44
45
  </process>
45
46
 
46
47
  <success_criteria>
47
- - [ ] Existe novo ficheiro em `.oxe/research/YYYY-MM-DD-<slug>.md` com secções base preenchidas de forma útil.
48
- - [ ] `.oxe/RESEARCH.md` existe e a tabela **Histórico** inclui a nova entrada.
48
+ - [ ] Existe novo ficheiro em `research/YYYY-MM-DD-<slug>.md` no escopo correto com secções base preenchidas de forma útil.
49
+ - [ ] `RESEARCH.md` do mesmo escopo existe e a tabela **Histórico** inclui a nova entrada.
49
50
  - [ ] Nenhuma nota anterior foi sobrescrita sem instrução explícita do utilizador.
50
51
  - [ ] `STATE.md` reflete o progresso e o próximo passo sugerido.
51
52
  </success_criteria>
@@ -1,62 +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
+ # 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,62 @@
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
-
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
11
  <context>
12
+ - Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. O relatório de segurança segue a sessão ativa em `verification/`, mas continua a ler `codebase/` global.
12
13
  - **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`.
14
+ - **Fontes de código:** `.oxe/codebase/STRUCTURE.md`, `.oxe/codebase/CONCERNS.md`, `.oxe/codebase/INTEGRATIONS.md` orientam quais arquivos focar.
15
+ - **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).
16
+ - **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`.
17
+ - **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.
18
+ - **Não alterar código:** apenas auditar e registrar achados. Nenhum arquivo de código é modificado.
19
+ </context>
20
+
21
+ <owasp_scope>
22
+ ## Mapeamento OWASP → Stack
23
+
24
+ Antes de auditar, determinar quais categorias se aplicam lendo `STACK.md` e `INTEGRATIONS.md`:
25
+
26
+ | Categoria OWASP | Aplicável quando |
27
+ |-----------------|-----------------|
28
+ | A01 — Broken Access Control | App com autenticação/autorização ou rotas protegidas |
29
+ | A02 — Cryptographic Failures | Dados sensíveis em trânsito ou em repouso; senhas; tokens |
30
+ | A03 — Injection | DB queries, shell commands, parsers de entrada, templates |
31
+ | A04 — Insecure Design | Ausência de modelagem de ameaças; fluxos de negócio sem validação |
32
+ | A05 — Security Misconfiguration | Config de servidor, CORS, headers HTTP, variáveis de ambiente |
33
+ | A06 — Vulnerable Components | Dependências com CVEs conhecidos; versões sem suporte |
34
+ | A07 — Authentication Failures | Login, sessão, JWT, OAuth, tokens de reset |
35
+ | A08 — Software Integrity | Supply chain; checksums; CI/CD sem verificação |
36
+ | A09 — Logging & Monitoring | Ausência de logs de eventos críticos; dados sensíveis em logs |
37
+ | A10 — SSRF | Requisições a URLs controladas pelo usuário; fetch/proxy interno |
38
+
39
+ **Selecionar apenas as categorias aplicáveis** ao stack identificado. Listar explicitamente as ignoradas e o motivo.
40
+ </owasp_scope>
41
+
42
+ <process>
43
+ 1. Ler `.oxe/codebase/STACK.md`, `.oxe/codebase/STRUCTURE.md`, `.oxe/codebase/INTEGRATIONS.md`, `.oxe/codebase/CONCERNS.md`.
44
+ 2. Selecionar categorias OWASP aplicáveis ao stack (ver `<owasp_scope>`); registrar as descartadas.
45
+ 3. Para cada categoria aplicável:
46
+ a. Identificar **arquivos críticos** (auth, input handlers, DB queries, configs, env, deps).
47
+ b. Ler os arquivos relevantes (Glob, Grep, Read) procurando padrões de risco.
48
+ c. Registrar achados com: localização (`path:linha`), padrão encontrado, severidade (P0/P1/P2), recomendação.
49
+ 4. Ler `PLAN.md` do escopo resolvido se existir — vincular achados P0/P1 a tarefas `Tn` existentes quando possível, ou criar sugestão `T_new`.
50
+ 5. Escrever `SECURITY.md` no escopo resolvido a partir de `oxe/templates/SECURITY.template.md`.
50
51
  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>
52
+ 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).
53
+ </process>
54
+
55
+ <success_criteria>
56
+ - [ ] `SECURITY.md` existe no escopo correto com categorias OWASP selecionadas e justificativa de descarte.
57
+ - [ ] Cada achado tem: localização, padrão, severidade, recomendação.
58
+ - [ ] Categorias sem achados registradas como "nenhum achado nesta categoria".
59
+ - [ ] Achados P0/P1 vinculados a `Tn` existente ou sugestão `T_new`.
60
+ - [ ] Nenhum arquivo de código foi modificado.
61
+ - [ ] STATE.md tem linha `security_audit` com data e contagem de achados.
62
+ </success_criteria>