oxe-cc 0.6.4 → 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.
- package/.cursor/commands/oxe-execute.md +1 -1
- package/.cursor/commands/oxe-session.md +11 -0
- package/.github/prompts/oxe-execute.prompt.md +1 -1
- package/.github/prompts/oxe-session.prompt.md +12 -0
- package/README.md +344 -323
- package/bin/banner.txt +1 -1
- package/commands/oxe/session.md +16 -0
- package/oxe/templates/SESSION.template.md +32 -0
- package/oxe/templates/STATE.md +10 -5
- package/oxe/workflows/checkpoint.md +10 -9
- package/oxe/workflows/debug.md +6 -5
- package/oxe/workflows/discuss.md +8 -7
- package/oxe/workflows/execute.md +14 -12
- package/oxe/workflows/forensics.md +6 -6
- package/oxe/workflows/help.md +21 -4
- package/oxe/workflows/milestone.md +12 -13
- package/oxe/workflows/next.md +6 -5
- package/oxe/workflows/obs.md +9 -8
- package/oxe/workflows/plan-agent.md +4 -3
- package/oxe/workflows/plan.md +17 -16
- package/oxe/workflows/project.md +1 -1
- package/oxe/workflows/quick.md +6 -5
- package/oxe/workflows/references/session-path-resolution.md +71 -0
- package/oxe/workflows/research.md +9 -8
- package/oxe/workflows/security.md +7 -6
- package/oxe/workflows/session.md +153 -0
- package/oxe/workflows/spec.md +26 -20
- package/oxe/workflows/ui-review.md +3 -3
- package/oxe/workflows/ui-spec.md +3 -3
- package/oxe/workflows/validate-gaps.md +5 -4
- package/oxe/workflows/verify.md +10 -9
- package/oxe/workflows/workstream.md +16 -15
- package/package.json +1 -1
package/oxe/workflows/plan.md
CHANGED
|
@@ -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:
|
|
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
|
|
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
|
-
-
|
|
16
|
-
- Se existir
|
|
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 lê 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
|
|
21
|
-
- Se existir
|
|
22
|
-
- Se existir
|
|
23
|
-
- Se existir
|
|
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
|
|
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
|
|
73
|
-
7. **Fidelidade de decisões:** se existir
|
|
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.
|
|
84
|
-
2. Se `.oxe/config.json` tiver `discuss_before_plan: true` e **não** existir
|
|
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
|
|
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
|
|
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>
|
package/oxe/workflows/project.md
CHANGED
|
@@ -14,7 +14,7 @@ Detecta a operação pelo primeiro token do input e delega ao workflow canônico
|
|
|
14
14
|
- Este workflow é um **dispatcher**: lê o input, identifica a operação e executa o workflow correto.
|
|
15
15
|
- Workflows canônicos: `oxe/workflows/milestone.md`, `oxe/workflows/workstream.md`, `oxe/workflows/checkpoint.md`.
|
|
16
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`,
|
|
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
18
|
</context>
|
|
19
19
|
|
|
20
20
|
<dispatch_table>
|
package/oxe/workflows/quick.md
CHANGED
|
@@ -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
|
-
-
|
|
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). Verificar
|
|
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
|
|
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
|
|
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
|
|
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
|
-
-
|
|
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:**
|
|
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
|
|
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
|
|
40
|
-
5. Se já existir, **atualizar** `RESEARCH.md
|
|
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
|
|
48
|
-
- [ ]
|
|
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>
|
|
@@ -8,8 +8,9 @@ Pode ser chamado standalone ou como Camada 5 do **`verify.md`** quando `config.j
|
|
|
8
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
9
|
</objective>
|
|
10
10
|
|
|
11
|
-
<context>
|
|
12
|
-
-
|
|
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.
|
|
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
14
|
- **Fontes de código:** `.oxe/codebase/STRUCTURE.md`, `.oxe/codebase/CONCERNS.md`, `.oxe/codebase/INTEGRATIONS.md` orientam quais arquivos focar.
|
|
14
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).
|
|
15
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`.
|
|
@@ -45,14 +46,14 @@ Antes de auditar, determinar quais categorias se aplicam lendo `STACK.md` e `INT
|
|
|
45
46
|
a. Identificar **arquivos críticos** (auth, input handlers, DB queries, configs, env, deps).
|
|
46
47
|
b. Ler os arquivos relevantes (Glob, Grep, Read) procurando padrões de risco.
|
|
47
48
|
c. Registrar achados com: localização (`path:linha`), padrão encontrado, severidade (P0/P1/P2), recomendação.
|
|
48
|
-
4. Ler
|
|
49
|
-
5. Escrever
|
|
50
|
-
6. Atualizar `.oxe/STATE.md`: nota de segurança (ex.: `security_audit: YYYY-MM-DD | P0:N | P1:N | P2:N`).
|
|
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`.
|
|
51
|
+
6. Atualizar `.oxe/STATE.md`: nota de segurança (ex.: `security_audit: YYYY-MM-DD | P0:N | P1:N | P2:N`).
|
|
51
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).
|
|
52
53
|
</process>
|
|
53
54
|
|
|
54
55
|
<success_criteria>
|
|
55
|
-
- [ ]
|
|
56
|
+
- [ ] `SECURITY.md` existe no escopo correto com categorias OWASP selecionadas e justificativa de descarte.
|
|
56
57
|
- [ ] Cada achado tem: localização, padrão, severidade, recomendação.
|
|
57
58
|
- [ ] Categorias sem achados registradas como "nenhum achado nesta categoria".
|
|
58
59
|
- [ ] Achados P0/P1 vinculados a `Tn` existente ou sugestão `T_new`.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# OXE — Workflow: session
|
|
2
|
+
|
|
3
|
+
<objective>
|
|
4
|
+
Gerenciar **sessões OXE** em `.oxe/sessions/` para isolar artefatos por ciclo de trabalho, mantendo **`.oxe/STATE.md`** como índice global e preservando o **modo legado** quando não houver sessão ativa.
|
|
5
|
+
|
|
6
|
+
Subcomandos:
|
|
7
|
+
- `new <nome>`
|
|
8
|
+
- `list`
|
|
9
|
+
- `switch <id-ou-nome>`
|
|
10
|
+
- `resume <id-ou-nome>`
|
|
11
|
+
- `status`
|
|
12
|
+
- `close`
|
|
13
|
+
- `migrate <nome>`
|
|
14
|
+
</objective>
|
|
15
|
+
|
|
16
|
+
<context>
|
|
17
|
+
- Fonte de regra de path: `oxe/workflows/references/session-path-resolution.md`
|
|
18
|
+
- Template da sessão: `oxe/templates/SESSION.template.md`
|
|
19
|
+
- Índice global: `.oxe/SESSIONS.md`
|
|
20
|
+
- Sessão ativa fica sempre em `.oxe/STATE.md`, campo `active_session`, com path relativo completo: `sessions/sNNN-slug`
|
|
21
|
+
- Sem sessão ativa, os workflows continuam a operar na raiz `.oxe/`
|
|
22
|
+
- Esta entrega é **workflows only**: `oxe-cc status` / `doctor` continuam legados e isso deve ser assumido nesta versão
|
|
23
|
+
</context>
|
|
24
|
+
|
|
25
|
+
<index_format>
|
|
26
|
+
## Formato fixo de `.oxe/SESSIONS.md`
|
|
27
|
+
|
|
28
|
+
```markdown
|
|
29
|
+
# OXE — Índice de sessões
|
|
30
|
+
|
|
31
|
+
| ID | Nome | Status | Criada | Última atividade | Resumo | Path |
|
|
32
|
+
|----|------|--------|--------|------------------|--------|------|
|
|
33
|
+
| s001 | auth-redesign | active | 2026-04-07 | 2026-04-07 | Sessão criada por migrate | `sessions/s001-auth-redesign` |
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- Linha mais recente no topo
|
|
37
|
+
- `switch` e `resume` atualizam **Última atividade**
|
|
38
|
+
- `close` atualiza **Status** para `archived`
|
|
39
|
+
</index_format>
|
|
40
|
+
|
|
41
|
+
<process_new>
|
|
42
|
+
## `new <nome>`
|
|
43
|
+
|
|
44
|
+
1. Garantir `.oxe/`, `.oxe/sessions/` e `.oxe/global/`.
|
|
45
|
+
2. Normalizar o nome para slug ASCII em kebab-case.
|
|
46
|
+
3. Ler `.oxe/SESSIONS.md` se existir; calcular o próximo ID `sNNN`.
|
|
47
|
+
4. Criar `.oxe/sessions/sNNN-slug/` com:
|
|
48
|
+
- `spec/`
|
|
49
|
+
- `plan/`
|
|
50
|
+
- `execution/`
|
|
51
|
+
- `verification/`
|
|
52
|
+
- `checkpoints/`
|
|
53
|
+
- `research/`
|
|
54
|
+
- `artifacts/`
|
|
55
|
+
- `workstreams/`
|
|
56
|
+
5. Criar `SESSION.md` a partir de `SESSION.template.md`.
|
|
57
|
+
6. Criar ou atualizar `.oxe/SESSIONS.md` com a nova linha no topo.
|
|
58
|
+
7. Atualizar `.oxe/STATE.md`:
|
|
59
|
+
- `active_session: sessions/sNNN-slug`
|
|
60
|
+
- `session_id: sNNN`
|
|
61
|
+
- fase resumida e próximo passo coerentes com a sessão nova
|
|
62
|
+
8. Responder no chat com ID, path da sessão e próximo passo sugerido.
|
|
63
|
+
</process_new>
|
|
64
|
+
|
|
65
|
+
<process_list>
|
|
66
|
+
## `list`
|
|
67
|
+
|
|
68
|
+
1. Ler `.oxe/SESSIONS.md`.
|
|
69
|
+
2. Se o ficheiro não existir, responder que não há sessões registadas.
|
|
70
|
+
3. Exibir a tabela do índice; se o utilizador pedir filtro, aceitar `--status active|archived`.
|
|
71
|
+
</process_list>
|
|
72
|
+
|
|
73
|
+
<process_switch>
|
|
74
|
+
## `switch <id-ou-nome>`
|
|
75
|
+
|
|
76
|
+
1. Ler `.oxe/SESSIONS.md`.
|
|
77
|
+
2. Resolver a sessão por `sNNN`, slug ou nome exibido na tabela.
|
|
78
|
+
3. Atualizar `.oxe/STATE.md` global:
|
|
79
|
+
- `active_session`
|
|
80
|
+
- `session_id`
|
|
81
|
+
- `Última atividade` dessa sessão em `.oxe/SESSIONS.md`
|
|
82
|
+
4. Não mover artefatos; apenas mudar o contexto ativo.
|
|
83
|
+
</process_switch>
|
|
84
|
+
|
|
85
|
+
<process_resume>
|
|
86
|
+
## `resume <id-ou-nome>`
|
|
87
|
+
|
|
88
|
+
- Mesmo comportamento de `switch`
|
|
89
|
+
- Usar wording de retomada no chat, mas sem lógica diferente
|
|
90
|
+
</process_resume>
|
|
91
|
+
|
|
92
|
+
<process_status>
|
|
93
|
+
## `status`
|
|
94
|
+
|
|
95
|
+
1. Ler `.oxe/STATE.md` global.
|
|
96
|
+
2. Se houver `active_session`, abrir `SESSION.md` da sessão ativa e resumir:
|
|
97
|
+
- metadados
|
|
98
|
+
- índice de artefatos
|
|
99
|
+
- tags
|
|
100
|
+
- último evento do histórico
|
|
101
|
+
3. Se não houver sessão ativa, responder com a tabela de `.oxe/SESSIONS.md` (equivalente funcional a `list`).
|
|
102
|
+
</process_status>
|
|
103
|
+
|
|
104
|
+
<process_close>
|
|
105
|
+
## `close`
|
|
106
|
+
|
|
107
|
+
1. Ler `.oxe/STATE.md`; se não houver sessão ativa, pausar e informar.
|
|
108
|
+
2. Abrir `SESSION.md` da sessão ativa e marcar `Status: archived`.
|
|
109
|
+
3. Atualizar `.oxe/SESSIONS.md` com `Status = archived` e `Última atividade = hoje`.
|
|
110
|
+
4. Limpar de `.oxe/STATE.md`:
|
|
111
|
+
- `active_session`
|
|
112
|
+
- `session_id`
|
|
113
|
+
5. Responder com a sessão encerrada e lembrar que sessões arquivadas continuam legíveis.
|
|
114
|
+
</process_close>
|
|
115
|
+
|
|
116
|
+
<process_migrate>
|
|
117
|
+
## `migrate <nome>`
|
|
118
|
+
|
|
119
|
+
1. Executar logicamente `new <nome>` para abrir uma nova sessão.
|
|
120
|
+
2. Mover apenas artefatos session-scoped existentes da raiz `.oxe/`:
|
|
121
|
+
- `SPEC.md`, `ROADMAP.md`, `DISCUSS.md`, `UI-SPEC.md` → `spec/`
|
|
122
|
+
- `PLAN.md`, `QUICK.md`, `plan-agents.json`, `quick-agents.json`, `plan-agent-messages/` → `plan/`
|
|
123
|
+
- `OBSERVATIONS.md`, `DEBUG.md`, `FORENSICS.md`, `SUMMARY.md` → `execution/`
|
|
124
|
+
- `VERIFY.md`, `VALIDATION-GAPS.md`, `SECURITY.md`, `UI-REVIEW.md` → `verification/`
|
|
125
|
+
- `checkpoints/`, `CHECKPOINTS.md` → `checkpoints/`
|
|
126
|
+
- `research/`, `RESEARCH.md` → `research/`
|
|
127
|
+
- `workstreams/` → `workstreams/`
|
|
128
|
+
3. Não mover:
|
|
129
|
+
- `.oxe/STATE.md`
|
|
130
|
+
- `.oxe/config.json`
|
|
131
|
+
- `.oxe/codebase/`
|
|
132
|
+
- `.oxe/SESSIONS.md`
|
|
133
|
+
- `.oxe/global/`
|
|
134
|
+
4. No chat, listar:
|
|
135
|
+
- movidos
|
|
136
|
+
- mantidos globais
|
|
137
|
+
- ignorados por inexistência
|
|
138
|
+
</process_migrate>
|
|
139
|
+
|
|
140
|
+
<process_default>
|
|
141
|
+
## Sem subcomando
|
|
142
|
+
|
|
143
|
+
- Se houver sessão ativa: executar `status`
|
|
144
|
+
- Se não houver sessão ativa: executar `list`
|
|
145
|
+
</process_default>
|
|
146
|
+
|
|
147
|
+
<success_criteria>
|
|
148
|
+
- [ ] `.oxe/sessions/sNNN-slug/` é o path da sessão criado/consultado.
|
|
149
|
+
- [ ] `active_session` guarda o path relativo completo no `STATE.md` global.
|
|
150
|
+
- [ ] `.oxe/SESSIONS.md` usa as colunas mínimas `ID | Nome | Status | Criada | Última atividade | Resumo | Path`.
|
|
151
|
+
- [ ] `close` arquiva sem apagar artefatos.
|
|
152
|
+
- [ ] `migrate` move só artefatos session-scoped e preserva os globais.
|
|
153
|
+
</success_criteria>
|
package/oxe/workflows/spec.md
CHANGED
|
@@ -13,14 +13,20 @@ Para trabalho **muito pequeno** que não justifica spec completa: redirecionar p
|
|
|
13
13
|
Se **`.oxe/config.json`** tiver `discuss_before_plan: true`: mencionar no final da Fase 5 que o próximo passo é **`oxe:discuss`** antes do plano.
|
|
14
14
|
</objective>
|
|
15
15
|
|
|
16
|
-
<context>
|
|
17
|
-
**Pré-requisito preferível:** scan executado. Se não existir, mencionar na spec que o mapa está pendente.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
16
|
+
<context>
|
|
17
|
+
**Pré-requisito preferível:** scan executado. Se não existir, mencionar na spec que o mapa está pendente.
|
|
18
|
+
|
|
19
|
+
**Resolução de sessão:** antes de ler ou escrever artefatos desta trilha, resolver `active_session` em `.oxe/STATE.md` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa:
|
|
20
|
+
- `SPEC.md`, `ROADMAP.md` e `DISCUSS.md` vivem em `.oxe/<active_session>/spec/`
|
|
21
|
+
- `OBSERVATIONS.md`, `RESEARCH.md` e `research/` seguem o escopo da sessão
|
|
22
|
+
- `LESSONS.md` continua global em `.oxe/global/LESSONS.md`
|
|
23
|
+
- sem sessão ativa, manter o modo legado na raiz `.oxe/`
|
|
24
|
+
|
|
25
|
+
Ler no início:
|
|
26
|
+
- `.oxe/STATE.md` — fase atual, decisões, workstream ativo
|
|
27
|
+
- `.oxe/codebase/OVERVIEW.md` e `STACK.md` se existirem — não contradizer o repo
|
|
28
|
+
- **OBS do escopo ativo** — se houver entradas `pendente` com impacto `spec` ou `all`, incorporá-las na Fase 3 (Requisitos) e marcá-las `incorporada → spec (data)` após uso
|
|
29
|
+
- **`.oxe/global/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.
|
|
24
30
|
|
|
25
31
|
**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.
|
|
26
32
|
|
|
@@ -69,8 +75,8 @@ Usar templates: **`oxe/templates/SPEC.template.md`** e **`oxe/templates/ROADMAP.
|
|
|
69
75
|
- "Há 3 áreas com incerteza técnica: autenticação JWT, integração com Stripe, e deploy em edge. Quer investigar alguma antes de avançar para requisitos?"
|
|
70
76
|
|
|
71
77
|
**Se aprovado:**
|
|
72
|
-
- Criar notas de pesquisa datadas em
|
|
73
|
-
- Atualizar
|
|
78
|
+
- Criar notas de pesquisa datadas em `research/YYYY-MM-DD-<slug>.md` no escopo ativo (usar fluxo de `research.md`)
|
|
79
|
+
- Atualizar `RESEARCH.md` no mesmo escopo
|
|
74
80
|
- Consolidar descobertas relevantes antes de avançar para Fase 3
|
|
75
81
|
|
|
76
82
|
**Se pulado:** registrar em `SPEC.md` as áreas de incerteza como suposições explícitas.
|
|
@@ -105,7 +111,7 @@ Usar templates: **`oxe/templates/SPEC.template.md`** e **`oxe/templates/ROADMAP.
|
|
|
105
111
|
<fase_4_roteiro>
|
|
106
112
|
## Fase 4 — Roteiro
|
|
107
113
|
|
|
108
|
-
**Objetivo:** criar fases de entrega mapeadas aos requisitos v1 e escrever
|
|
114
|
+
**Objetivo:** criar fases de entrega mapeadas aos requisitos v1 e escrever `ROADMAP.md` no escopo ativo da sessão.
|
|
109
115
|
|
|
110
116
|
**Lógica de agrupamento:**
|
|
111
117
|
- Agrupar requisitos v1 em fases por **dependência técnica** e **valor entregável**
|
|
@@ -113,14 +119,14 @@ Usar templates: **`oxe/templates/SPEC.template.md`** e **`oxe/templates/ROADMAP.
|
|
|
113
119
|
- Fase 1 = o que `/oxe-plan` implementará no próximo ciclo
|
|
114
120
|
- Fases 2+ = ciclos futuros de spec→plan→execute→verify
|
|
115
121
|
|
|
116
|
-
**Escrever
|
|
122
|
+
**Escrever `ROADMAP.md`** usando `oxe/templates/ROADMAP.template.md` no escopo ativo:
|
|
117
123
|
|
|
118
124
|
```markdown
|
|
119
125
|
---
|
|
120
126
|
oxe_doc: roadmap
|
|
121
127
|
status: draft
|
|
122
128
|
updated: <data>
|
|
123
|
-
spec_ref:
|
|
129
|
+
spec_ref: SPEC.md
|
|
124
130
|
---
|
|
125
131
|
|
|
126
132
|
## Fase 1 — [Nome]
|
|
@@ -192,24 +198,24 @@ O resultado desta reflexão é **invisível ao usuário** — é trabalho intern
|
|
|
192
198
|
</fase_5_aprovacao>
|
|
193
199
|
|
|
194
200
|
<process>
|
|
195
|
-
1. Ler `.oxe/STATE.md`, `OVERVIEW.md`, `STACK.md` e
|
|
201
|
+
1. Ler `.oxe/STATE.md`, `OVERVIEW.md`, `STACK.md` e `OBSERVATIONS.md` do escopo ativo (verificar pendentes).
|
|
196
202
|
2. **Fase 1 — Perguntas:** enviar bloco coeso de 3-5 perguntas; máx 3 rodadas; confirmar entendimento.
|
|
197
203
|
3. **Fase 2 — Pesquisa:** propor áreas de investigação; aguardar aprovação; executar se aprovado.
|
|
198
204
|
4. **Fase 3 — Requisitos:** extrair tabela R-ID com v1/v2/fora e critérios A*; incorporar OBS pendentes; apresentar para validação.
|
|
199
|
-
5. **Fase 4 — Roteiro:** agrupar requisitos v1 em fases; escrever
|
|
200
|
-
6. Escrever
|
|
205
|
+
5. **Fase 4 — Roteiro:** agrupar requisitos v1 em fases; escrever `ROADMAP.md` no escopo ativo.
|
|
206
|
+
6. Escrever **`SPEC.md`** usando `oxe/templates/SPEC.template.md` no escopo ativo:
|
|
201
207
|
- Frontmatter YAML (`oxe_doc: spec`, `status`, `updated`, `inputs`)
|
|
202
208
|
- Objetivo, Escopo (dentro/fora), Critérios de aceite (tabela A*), Suposições e riscos, Referências
|
|
203
209
|
- Preservar chaves existentes se SPEC.md já existir; atualizar `updated:`
|
|
204
210
|
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.
|
|
205
211
|
7. **Fase 5 — Aprovação:** apresentar resumo, aguardar aprovação do roteiro, redirecionar.
|
|
206
|
-
8. Atualizar **`.oxe/STATE.md
|
|
207
|
-
9. Marcar OBS incorporadas em
|
|
212
|
+
8. Atualizar **`.oxe/STATE.md`** global: `phase: spec_ready`, próximo passo e referência curta à sessão ativa quando existir.
|
|
213
|
+
9. Marcar OBS incorporadas em `OBSERVATIONS.md` do escopo ativo se houver pendentes de impacto `spec`.
|
|
208
214
|
</process>
|
|
209
215
|
|
|
210
216
|
<success_criteria>
|
|
211
|
-
- [ ]
|
|
212
|
-
- [ ]
|
|
217
|
+
- [ ] `SPEC.md` existe no escopo correto (`spec/` da sessão ou `.oxe/` legado) com critérios A* e coluna Como verificar; `STATE.md` global atualizado.
|
|
218
|
+
- [ ] `ROADMAP.md` existe no mesmo escopo com fases mapeadas a R-IDs e A*, status `approved` (ou `draft` se usuário não confirmou).
|
|
213
219
|
- [ ] Tabela de requisitos R-ID foi apresentada e validada (v1/v2/fora) antes do roteiro.
|
|
214
220
|
- [ ] Usuário foi consultado no gate da Fase 5 e escolheu o próximo passo.
|
|
215
221
|
- [ ] OBS pendentes com impacto `spec` foram incorporadas e marcadas `incorporada`.
|
|
@@ -13,9 +13,9 @@ Não substitui **`verify`**: cruza contrato UI; o verify global continua a amarr
|
|
|
13
13
|
</context>
|
|
14
14
|
|
|
15
15
|
<process>
|
|
16
|
-
1.
|
|
17
|
-
2. Escrever
|
|
18
|
-
3. Atualizar **`.oxe/STATE.md`** se útil (referência a UI-REVIEW pendente de verify).
|
|
16
|
+
1. Resolver `active_session` conforme `session-path-resolution.md`; ler `UI-SPEC.md` e `SPEC.md` do escopo resolvido e inspecionar ficheiros de UI relevantes (paths do PLAN ou indicados pelo utilizador).
|
|
17
|
+
2. Escrever **`UI-REVIEW.md`** no escopo de `verification/` da sessão ativa (ou `.oxe/` legado) com: **Data**, **Âmbito revisto**, **Checklist** (passou / falhou / N/A), **Bloqueios**, **Sugestões**.
|
|
18
|
+
3. Atualizar **`.oxe/STATE.md`** global se útil (referência a UI-REVIEW pendente de verify).
|
|
19
19
|
4. Indicar no chat: se há P0 → próximo passo típico **`/oxe-execute`** (correções); senão **`/oxe-verify`** para fecho global.
|
|
20
20
|
</process>
|
|
21
21
|
|
package/oxe/workflows/ui-spec.md
CHANGED
|
@@ -13,9 +13,9 @@ Produzir **`.oxe/UI-SPEC.md`**: contrato de UI/UX derivado de **`.oxe/SPEC.md`**
|
|
|
13
13
|
</context>
|
|
14
14
|
|
|
15
15
|
<process>
|
|
16
|
-
1.
|
|
17
|
-
2. Criar ou atualizar
|
|
18
|
-
3. Atualizar **`.oxe/STATE.md
|
|
16
|
+
1. Resolver `active_session` conforme `session-path-resolution.md`; ler `SPEC.md` do escopo resolvido e, se existirem, `OVERVIEW.md` / `CONVENTIONS.md` em `.oxe/codebase/`.
|
|
17
|
+
2. Criar ou atualizar **`UI-SPEC.md`** em `.oxe/<active_session>/spec/` (ou `.oxe/` legado) com as secções acima preenchidas de forma verificável (checklist ou critérios numerados **U1**, **U2**… opcionais).
|
|
18
|
+
3. Atualizar **`.oxe/STATE.md`** global: nota de fase ou próximo passo `oxe:plan` (se ainda não há PLAN) ou manter `oxe:execute` se o plano já referencia UI.
|
|
19
19
|
4. Resumo no chat: o que ficou no UI-SPEC e como o **`/oxe-plan`** deve citar as secções (ex.: “cumprir UI-SPEC §2”).
|
|
20
20
|
</process>
|
|
21
21
|
|
|
@@ -6,20 +6,21 @@ Após **`verify`**, produzir ou atualizar **`.oxe/VALIDATION-GAPS.md`**: auditor
|
|
|
6
6
|
Não substitui **`verify`**: não reescreve a evidência em `VERIFY.md`; adiciona uma camada de “gaps” e melhorias para a próxima ronda ou replan.
|
|
7
7
|
</objective>
|
|
8
8
|
|
|
9
|
-
<context>
|
|
10
|
-
-
|
|
9
|
+
<context>
|
|
10
|
+
- Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa, `VERIFY.md`, `PLAN.md`, `SPEC.md` e `VALIDATION-GAPS.md` vivem no escopo da sessão; sem sessão ativa, manter `.oxe/`.
|
|
11
|
+
- **Pré-requisitos:** `VERIFY.md` e `PLAN.md` existem no escopo resolvido. `SPEC.md` altamente recomendado para cruzar IDs **A***.
|
|
11
12
|
- **Quando usar:** equipas que querem fechar dívida de testes, evidência fraca ou desalinhamento após um verify (passou ou falhou).
|
|
12
13
|
- **Edição do PLAN:** só se o utilizador pedir explicitamente incorporar as sugestões no plano.
|
|
13
14
|
</context>
|
|
14
15
|
|
|
15
16
|
<process>
|
|
16
|
-
1. Ler
|
|
17
|
+
1. Ler `PLAN.md` (cada `### Tn`, **Verificar**, **Aceite vinculado:**), `VERIFY.md` (tabelas de tarefas e de critérios SPEC), e `SPEC.md` do escopo resolvido se existir.
|
|
17
18
|
2. Aplicar checklist de deteção (marcar cada achado nos **Gaps**):
|
|
18
19
|
- **A*** na SPEC sem linha clara na tabela de critérios do VERIFY, ou com evidência inexistente/vaga.
|
|
19
20
|
- **Tn** com `Comando: —` ou **Manual** vago quando o critério associado pede rigor reprodutível.
|
|
20
21
|
- VERIFY indica sucesso mas a coluna de evidência é só genérica (sem path, comando ou trecho identificável).
|
|
21
22
|
- Tarefa no PLAN sem linha correspondente na tabela de tarefas do VERIFY (verify focado em subset — documentar como gap de escopo).
|
|
22
|
-
3. Escrever ou atualizar
|
|
23
|
+
3. Escrever ou atualizar **`VALIDATION-GAPS.md`** no escopo resolvido com secções fixas:
|
|
23
24
|
- **Data** (ISO) e **Contexto** (verify passou / falhou; ambiente se relevante).
|
|
24
25
|
- **Gaps** — tabela: **ID ou Tn** | **Tipo de gap** | **Severidade sugerida** (P0/P1/P2) | **Nota**.
|
|
25
26
|
- **Sugestões de tarefas** — rascunhos `T_new` ou bullets para incorporar no próximo `oxe:plan --replan`; **apenas texto**.
|