oxe-cc 0.3.8 → 0.5.0
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-checkpoint.md +2 -0
- package/.cursor/commands/oxe-compact.md +2 -0
- package/.cursor/commands/oxe-debug.md +2 -0
- package/.cursor/commands/oxe-discuss.md +2 -0
- package/.cursor/commands/oxe-execute.md +3 -1
- package/.cursor/commands/oxe-forensics.md +2 -0
- package/.cursor/commands/oxe-help.md +2 -0
- package/.cursor/commands/oxe-milestone.md +11 -0
- package/.cursor/commands/oxe-next.md +2 -0
- package/.cursor/commands/oxe-obs.md +11 -0
- package/.cursor/commands/oxe-plan-agent.md +2 -0
- package/.cursor/commands/oxe-plan.md +2 -0
- package/.cursor/commands/oxe-quick.md +3 -1
- package/.cursor/commands/oxe-research.md +2 -0
- package/.cursor/commands/oxe-review-pr.md +2 -0
- package/.cursor/commands/oxe-route.md +2 -0
- package/.cursor/commands/oxe-scan.md +2 -0
- package/.cursor/commands/oxe-spec.md +3 -1
- package/.cursor/commands/oxe-ui-review.md +2 -0
- package/.cursor/commands/oxe-ui-spec.md +2 -0
- package/.cursor/commands/oxe-update.md +2 -0
- package/.cursor/commands/oxe-validate-gaps.md +2 -0
- package/.cursor/commands/oxe-verify.md +2 -0
- package/.cursor/commands/oxe-workstream.md +11 -0
- package/.github/prompts/oxe-execute.prompt.md +12 -12
- package/.github/prompts/oxe-milestone.prompt.md +12 -0
- package/.github/prompts/oxe-obs.prompt.md +12 -0
- package/.github/prompts/oxe-quick.prompt.md +12 -12
- package/.github/prompts/oxe-spec.prompt.md +2 -2
- package/.github/prompts/oxe-workstream.prompt.md +12 -0
- package/README.md +205 -442
- package/bin/banner.txt +1 -1
- package/bin/lib/oxe-plugins.cjs +226 -0
- package/bin/lib/oxe-project-health.cjs +97 -1
- package/bin/lib/oxe-security.cjs +225 -0
- package/bin/oxe-cc.js +29 -0
- package/commands/oxe/execute.md +16 -16
- package/commands/oxe/milestone.md +16 -0
- package/commands/oxe/obs.md +16 -0
- package/commands/oxe/quick.md +16 -16
- package/commands/oxe/spec.md +2 -2
- package/commands/oxe/workstream.md +16 -0
- package/lib/sdk/index.cjs +284 -0
- package/lib/sdk/index.d.ts +148 -1
- package/oxe/personas/README.md +39 -0
- package/oxe/personas/architect.md +37 -0
- package/oxe/personas/db-specialist.md +36 -0
- package/oxe/personas/debugger.md +38 -0
- package/oxe/personas/executor.md +38 -0
- package/oxe/personas/planner.md +36 -0
- package/oxe/personas/researcher.md +35 -0
- package/oxe/personas/ui-specialist.md +36 -0
- package/oxe/personas/verifier.md +39 -0
- package/oxe/templates/CONFIG.md +58 -4
- package/oxe/templates/DISCUSS.template.md +44 -0
- package/oxe/templates/MEMORY.template.md +49 -0
- package/oxe/templates/MILESTONES.template.md +17 -0
- package/oxe/templates/OBSERVATIONS.template.md +18 -0
- package/oxe/templates/PLUGINS.md +101 -0
- package/oxe/templates/ROADMAP.template.md +44 -0
- package/oxe/templates/STATE.md +29 -2
- package/oxe/templates/config.template.json +5 -0
- package/oxe/templates/plan-agent-messages-README.template.md +1 -1
- package/oxe/templates/quick-agents.template.json +24 -0
- package/oxe/workflows/discuss.md +48 -5
- package/oxe/workflows/execute.md +111 -28
- package/oxe/workflows/help.md +80 -15
- package/oxe/workflows/milestone.md +96 -0
- package/oxe/workflows/obs.md +95 -0
- package/oxe/workflows/plan-agent.md +31 -1
- package/oxe/workflows/plan.md +5 -1
- package/oxe/workflows/quick.md +120 -10
- package/oxe/workflows/references/plan-agent-chat-protocol.md +14 -0
- package/oxe/workflows/scan.md +9 -1
- package/oxe/workflows/spec.md +172 -23
- package/oxe/workflows/verify.md +77 -17
- package/oxe/workflows/workstream.md +96 -0
- package/package.json +3 -2
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# OXE — Workflow: obs
|
|
2
|
+
|
|
3
|
+
<objective>
|
|
4
|
+
Registrar uma **observação contextual** em **`.oxe/OBSERVATIONS.md`** durante ou fora de uma execução. A observação é incorporada automaticamente nos próximos `/oxe-spec`, `/oxe-plan`, `/oxe-discuss` ou `/oxe-execute` sem necessidade de re-explicar.
|
|
5
|
+
|
|
6
|
+
**Princípio:** *observation-without-re-explaining* — registre em 1 request, receba o benefício em todos os workflows seguintes sem custo extra de requisição.
|
|
7
|
+
|
|
8
|
+
Entrada: texto livre com a observação (restrição, descoberta técnica, preferência, risco, decisão).
|
|
9
|
+
</objective>
|
|
10
|
+
|
|
11
|
+
<context>
|
|
12
|
+
- Pode ser chamado **a qualquer momento**: antes, durante ou após qualquer passo da trilha OXE.
|
|
13
|
+
- Não interrompe o fluxo em curso — a observação é armazenada e incorporada na próxima oportunidade.
|
|
14
|
+
- Se chamado **durante execute** (fase `executing` no STATE) com impacto `execute` ou `all`: oferecer opção de aplicar agora (pausar onda atual) ou continuar e aplicar na próxima rodada.
|
|
15
|
+
- Ler **`.oxe/STATE.md`** para capturar o contexto automático (fase atual, tarefa ativa, workstream ativo).
|
|
16
|
+
- Usar `oxe/templates/OBSERVATIONS.template.md` para criar o arquivo se ainda não existir.
|
|
17
|
+
</context>
|
|
18
|
+
|
|
19
|
+
<format_observations_md>
|
|
20
|
+
Arquivo: **`.oxe/OBSERVATIONS.md`**
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
# Observações OXE
|
|
24
|
+
|
|
25
|
+
| ID | Data | Contexto | Impacto | Status |
|
|
26
|
+
|----|------|----------|---------|--------|
|
|
27
|
+
| OBS-001 | 2026-04-04 | execute/T3 | spec, plan | pendente |
|
|
28
|
+
| OBS-002 | 2026-04-04 | pós-spec | execute | incorporada → execute (2026-04-04) |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### OBS-001 — 2026-04-04 | execute/T3
|
|
33
|
+
**Impacto:** spec, plan
|
|
34
|
+
**Status:** pendente
|
|
35
|
+
|
|
36
|
+
JWT expiration deve ser configurável via `JWT_EXPIRES_IN` env var, não hardcoded 7d.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### OBS-002 — 2026-04-04 | pós-spec
|
|
41
|
+
**Impacto:** execute
|
|
42
|
+
**Status:** incorporada → execute (2026-04-04)
|
|
43
|
+
|
|
44
|
+
API deve retornar mensagens de erro em português do Brasil.
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**IDs:** sequenciais `OBS-001`, `OBS-002`, … (continuar do último ID existente no arquivo).
|
|
48
|
+
|
|
49
|
+
**Impacto:** classificar automaticamente com base no conteúdo:
|
|
50
|
+
- `spec` — afeta requisitos, critérios de aceite ou escopo
|
|
51
|
+
- `plan` — afeta tarefas, ondas, dependências ou verificação
|
|
52
|
+
- `execute` — afeta a implementação da tarefa atual ou próxima
|
|
53
|
+
- `all` — afeta múltiplas camadas
|
|
54
|
+
|
|
55
|
+
**Status lifecycle:** `pendente` → `incorporada → <workflow> (YYYY-MM-DD)`
|
|
56
|
+
</format_observations_md>
|
|
57
|
+
|
|
58
|
+
<process>
|
|
59
|
+
1. Ler **`.oxe/STATE.md`**: capturar `phase`, `last_task` ou tarefa ativa na onda, `active_workstream`.
|
|
60
|
+
2. Determinar o **próximo ID** (OBS-NNN): contar entradas existentes em `.oxe/OBSERVATIONS.md` ou começar em OBS-001.
|
|
61
|
+
3. Classificar o **impacto** automaticamente com base no texto; se ambíguo, usar `all`.
|
|
62
|
+
4. Criar ou atualizar **`.oxe/OBSERVATIONS.md`**:
|
|
63
|
+
- Adicionar linha na tabela de índice.
|
|
64
|
+
- Adicionar seção `### OBS-NNN` com contexto, impacto, status e texto.
|
|
65
|
+
5. Avaliar **urgência**:
|
|
66
|
+
- Se `phase` ∈ `{ executing, quick_active }` **e** impacto ∈ `{ execute, all }`:
|
|
67
|
+
- Apresentar ao usuário: "Observação registrada. Deseja aplicar agora (pausar onda atual) ou continuar e incorporar na próxima rodada?"
|
|
68
|
+
- Se pausar: sugerir revisão do bloco `**Verificar:**` da tarefa ativa e ajuste inline.
|
|
69
|
+
- Se continuar: confirmar que será incorporado no início da próxima onda.
|
|
70
|
+
- Em qualquer outro caso: confirmar registro e mencionar quando será incorporado.
|
|
71
|
+
6. Atualizar **`.oxe/STATE.md`**: adicionar ou atualizar campo `obs_pendentes: true` (remover ou marcar `false` quando todos os OBS estiverem `incorporada`).
|
|
72
|
+
7. Responder no chat com: ID atribuído (OBS-NNN), impacto classificado, próximo passo sugerido (qual workflow incorporará a observação).
|
|
73
|
+
</process>
|
|
74
|
+
|
|
75
|
+
<auto_incorporation_rule>
|
|
76
|
+
Qualquer workflow que leia `.oxe/OBSERVATIONS.md` deve:
|
|
77
|
+
1. Verificar se há entradas com `Status: pendente` relevantes ao seu escopo de impacto.
|
|
78
|
+
2. Incorporar o conteúdo na lógica do workflow (enriquecer requisitos, ajustar tarefas, modificar implementação).
|
|
79
|
+
3. Após incorporar: atualizar a linha no índice e na seção `### OBS-NNN` para `incorporada → <workflow> (data)`.
|
|
80
|
+
4. Se `STATE.md` tiver `obs_pendentes: true` e todas as observações relevantes foram incorporadas: atualizar para `obs_pendentes: false`.
|
|
81
|
+
|
|
82
|
+
**Workflows que incorporam observações:**
|
|
83
|
+
- `/oxe-spec` (Fase 3 — Requisitos): impacto `spec` ou `all`
|
|
84
|
+
- `/oxe-plan`: impacto `plan` ou `all`
|
|
85
|
+
- `/oxe-discuss`: impacto `spec`, `plan` ou `all` (como contexto adicional)
|
|
86
|
+
- `/oxe-execute`: impacto `execute` ou `all` — incorporar no início da onda atual
|
|
87
|
+
</auto_incorporation_rule>
|
|
88
|
+
|
|
89
|
+
<success_criteria>
|
|
90
|
+
- [ ] `.oxe/OBSERVATIONS.md` existe com entrada OBS-NNN na tabela e seção de detalhe.
|
|
91
|
+
- [ ] Impacto classificado corretamente (spec | plan | execute | all).
|
|
92
|
+
- [ ] `STATE.md` tem `obs_pendentes: true`.
|
|
93
|
+
- [ ] Se urgência execute: usuário foi consultado sobre pausar ou continuar.
|
|
94
|
+
- [ ] Resposta no chat inclui ID, impacto e próximo passo de incorporação.
|
|
95
|
+
</success_criteria>
|
|
@@ -10,7 +10,7 @@ O plano **não** é só uma lista de tarefas: cada agente é um **pacote de cont
|
|
|
10
10
|
|
|
11
11
|
**Exclusividade:** os papéis definidos no JSON são **efémeros** e **exclusivos** da trilha PLAN + **`/oxe-execute`** com este `runId`. **`/oxe-quick`** ou trabalho fora do `PLAN.md` **não** reutilizam estes agentes (ver **`quick.md`**, **`execute.md`**, referência **`references/plan-agent-chat-protocol.md`**).
|
|
12
12
|
|
|
13
|
-
Se o utilizador pedir **`--replan`**: aplicar a mesma lógica de replanejamento descrita em **`plan.md`** (VERIFY, SUMMARY, secção Replanejamento) e **atualizar ou recriar** `plan-agents.json` em coerência com o novo `PLAN.md`; gerar **novo** `runId` e repor `lifecycle.status` → `pending_execute
|
|
13
|
+
Se o utilizador pedir **`--replan`**: aplicar a mesma lógica de replanejamento descrita em **`plan.md`** (VERIFY, SUMMARY, secção Replanejamento) e **atualizar ou recriar** `plan-agents.json` em coerência com o novo `PLAN.md`; gerar **novo** `runId` e repor `lifecycle.status` → `pending_execute`. Se ainda existir pasta **`.oxe/plan-agent-messages/`** cheia do **run** anterior e o utilizador não precisar dela na raiz, **arquivar** primeiro em **`.oxe/archive/plan-agent-runs/<runId-antigo>/`** (ver **`references/plan-agent-chat-protocol.md`**) ou pedir confirmação antes de sobrescrever; depois recriar **`.oxe/plan-agent-messages/README.md`** para o novo `runId`.
|
|
14
14
|
</objective>
|
|
15
15
|
|
|
16
16
|
<context>
|
|
@@ -26,6 +26,31 @@ Se o utilizador pedir **`--replan`**: aplicar a mesma lógica de replanejamento
|
|
|
26
26
|
- Modelo JSON: ver **`oxe/templates/plan-agents.template.json`** e **`oxe/schemas/plan-agents.schema.json`**.
|
|
27
27
|
</context>
|
|
28
28
|
|
|
29
|
+
<agent_isolation_rule>
|
|
30
|
+
## Regra de Isolamento de Agentes (Plan-Driven Dynamic Agents)
|
|
31
|
+
|
|
32
|
+
**Cada `/oxe-plan-agent` cria agentes NOVOS para ESTE plano específico.**
|
|
33
|
+
|
|
34
|
+
| Regra | Descrição |
|
|
35
|
+
|-------|-----------|
|
|
36
|
+
| **`runId` único** | Gerar `runId` NOVO a cada execução — nunca reutilizar `runId` de `plan-agents.json` anterior |
|
|
37
|
+
| **`role` específico** | Descrever o papel no domínio desta demanda: "Especialista em autenticação JWT para este plano", não "Backend Developer" genérico |
|
|
38
|
+
| **Não há reuso** | Agentes de planos ou demandas anteriores são inválidos para este plano. `lifecycle.status: invalidated` em qualquer blueprint anterior com `invalidatedBy: "new_plan"` |
|
|
39
|
+
| **Lifecycle exclusivo** | Agentes vivem somente enquanto `lifecycle.status ∈ { pending_execute, executing }` e `runId` alinhado ao STATE.md |
|
|
40
|
+
| **Gate de unicidade** | No quality gate: verificar que o `runId` gerado não existe em nenhum `plan-agents.json` anterior no repositório |
|
|
41
|
+
|
|
42
|
+
**Invalidação de blueprint anterior:**
|
|
43
|
+
Se já existir `.oxe/plan-agents.json` com status não-terminal (`pending_execute` ou `executing`), invalidá-lo antes de criar o novo:
|
|
44
|
+
```json
|
|
45
|
+
"lifecycle": {
|
|
46
|
+
"status": "invalidated",
|
|
47
|
+
"since": "<ISO agora>",
|
|
48
|
+
"invalidatedBy": "new_plan",
|
|
49
|
+
"invalidatedReason": "Novo /oxe-plan-agent iniciado para nova demanda"
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
</agent_isolation_rule>
|
|
53
|
+
|
|
29
54
|
<format_plan_md>
|
|
30
55
|
Seguir **integralmente** o bloco **`<format_plan>`** e **`<plan_quality_gate>`** do ficheiro **`oxe/workflows/plan.md`** ao escrever `.oxe/PLAN.md` (incluindo gate antes de fechar).
|
|
31
56
|
</format_plan_md>
|
|
@@ -49,12 +74,15 @@ Cada **agente**:
|
|
|
49
74
|
|-------|-------------|-------------|
|
|
50
75
|
| `id` | sim | Slug único estável (`agent-db`, `agent-backend-auth`). |
|
|
51
76
|
| `role` | sim | Nome legível do papel. |
|
|
77
|
+
| `persona` | não | ID de persona em `oxe/personas/` (ex.: `executor`, `architect`). O workflow `/oxe-execute` carrega a persona para instruir o LLM. Ver `oxe/personas/README.md`. |
|
|
52
78
|
| `scope` | sim | Lista de strings (o que este agente faz, em bullets curtos). |
|
|
53
79
|
| `taskIds` | sim | Lista de IDs **`T1`…`Tn`** que este agente implementa (subconjunto do `PLAN.md`). |
|
|
54
80
|
| `dependencies` | não | Lista de **`id`** de outros agentes que devem concluir antes (grafo entre agentes). |
|
|
55
81
|
| `inputs` | não | Caminhos ou nomes de artefactos a carregar no contexto (ex.: `.oxe/STATE.md`, `.oxe/SPEC.md`). |
|
|
56
82
|
| `outputs` | não | Paths ou padrões de ficheiros esperados (orientação; o código real vem do PLAN). |
|
|
57
83
|
|
|
84
|
+
**Personas disponíveis:** `executor`, `planner`, `verifier`, `researcher`, `debugger`, `architect`, `ui-specialist`, `db-specialist`. Ver `oxe/personas/README.md` para descrição de cada uma. Personas customizadas do projeto ficam em `.oxe/personas/`.
|
|
85
|
+
|
|
58
86
|
**Regras de desenho:** preferir **um agente por domínio** (DB, API, UI) e **várias `Tn`** no mesmo agente quando partilham contexto; usar **agentes separados** quando o contexto mínimo diverge forte (evita fugas de foco).
|
|
59
87
|
</format_plan_agents_json>
|
|
60
88
|
|
|
@@ -69,6 +97,8 @@ Antes de finalizar, validar **em conjunto** `PLAN.md` + `plan-agents.json`:
|
|
|
69
97
|
6. **Alinhamento SPEC:** cada `scope` relevante deve ser rastreável a critérios **A*** via `taskIds` → **Aceite vinculado** no PLAN.
|
|
70
98
|
7. **Artefactos de mensagens:** pasta **`.oxe/plan-agent-messages/`** existe e contém **`README.md`** (conteúdo baseado em **`oxe/templates/plan-agent-messages-README.template.md`**).
|
|
71
99
|
|
|
100
|
+
8. **Isolamento:** `runId` gerado é novo e único; se havia blueprint anterior com status não-terminal, foi invalidado com `invalidatedBy: "new_plan"` antes de criar o novo (ver `<agent_isolation_rule>`).
|
|
101
|
+
|
|
72
102
|
Resumo obrigatório no chat: `Gate plan-agent: OK` ou `Gate plan-agent: corrigido (N problemas)`.
|
|
73
103
|
</plan_agent_quality_gate>
|
|
74
104
|
|
package/oxe/workflows/plan.md
CHANGED
|
@@ -12,10 +12,11 @@ Se o usuário pedir **--replan** (ou replanejamento implícito após `verify_fai
|
|
|
12
12
|
</objective>
|
|
13
13
|
|
|
14
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)`.
|
|
15
16
|
- 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).
|
|
16
17
|
- 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*.
|
|
17
18
|
- Se existir **`.oxe/UI-SPEC.md`**, as tarefas de UI devem referenciar secções do UI-SPEC no texto de **Implementação** ou **Verificar**.
|
|
18
|
-
- Se existir **`.oxe/DISCUSS.md`**, alinhar tarefas às decisões registradas.
|
|
19
|
+
- 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.
|
|
19
20
|
- 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.
|
|
20
21
|
- 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
22
|
- 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/`.
|
|
@@ -38,6 +39,8 @@ Cada tarefa em PLAN.md deve seguir:
|
|
|
38
39
|
- Comando: `...` (ex.: npm test, pytest, mvn test)
|
|
39
40
|
- Manual: (opcional) passos breves
|
|
40
41
|
- **Aceite vinculado:** A1, A2 (IDs exatos da tabela de critérios da SPEC)
|
|
42
|
+
- **Decisão vinculada:** D-01, D-02 (IDs de `.oxe/DISCUSS.md` — omitir se não houver DISCUSS)
|
|
43
|
+
<!-- oxe-task: {"id":"Tn","wave":1,"type":"feature","files":[],"done":false} -->
|
|
41
44
|
```
|
|
42
45
|
|
|
43
46
|
**Projetos sem suíte de testes única (legado):** o bloco **Verificar** pode usar `Comando: —` e **Manual** com Grep, leitura de paths ou checklist — ver exemplos em **`oxe/workflows/references/legacy-brownfield.md`**. Todo critério **A*** da SPEC deve aparecer em **Aceite vinculado** de alguma tarefa ou como gap explícito.
|
|
@@ -54,6 +57,7 @@ Antes de finalizar a resposta ao utilizador, o agente **deve** percorrer este ga
|
|
|
54
57
|
4. **Ondas:** cada número de **Onda:** usado tem pelo menos uma tarefa; sem ondas vazias.
|
|
55
58
|
5. **`plan_max_tasks_per_wave`:** se `.oxe/config.json` tiver valor **> 0**, contar tarefas por **Onda**; nenhuma onda excede o limite.
|
|
56
59
|
6. **UI-SPEC:** se existir `.oxe/UI-SPEC.md`, toda tarefa cuja **Implementação** ou **Verificar** toque UI (paths como `*.tsx`, `components/`, ou palavras-chave front, ou pedido explícito do utilizador) deve citar **secção § do UI-SPEC** ou path explícito.
|
|
60
|
+
7. **Fidelidade de decisões:** se existir `.oxe/DISCUSS.md` com IDs **D-NN**, cada decisão com impacto técnico deve aparecer em **Decisão vinculada:** de alguma tarefa, ou ter nota explícita de gap (fora do escopo desta entrega). Sem cobertura para D-NN técnico = falha do gate.
|
|
57
61
|
|
|
58
62
|
Se após correções estruturais persistir ambiguidade de produto: **uma** frase recomendando `oxe:discuss` ou `oxe:spec`.
|
|
59
63
|
|
package/oxe/workflows/quick.md
CHANGED
|
@@ -3,15 +3,114 @@
|
|
|
3
3
|
<objective>
|
|
4
4
|
Registrar trabalho **rápido a médio** sem SPEC/PLAN completos: objetivo claro, passos curtos e uma verificação. Saída principal: **`.oxe/QUICK.md`** + atualização de **`.oxe/STATE.md`**.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Quando o trabalho envolve **2 ou mais domínios distintos** (ex.: backend + frontend, DB + API, CLI + UI), aplicar também o conceito de **Plan-Driven Dynamic Agents — lean**: agentes focados derivados dos passos do QUICK.md, criados para esta demanda específica, sem reutilização entre demandas. O modo com agentes cria também **`.oxe/quick-agents.json`**.
|
|
7
|
+
|
|
8
|
+
Usar quando: correção pontual, refactor local, feature pequena ou protótipo que **não** justifica critérios de aceite completos.
|
|
7
9
|
</objective>
|
|
8
10
|
|
|
9
11
|
<context>
|
|
10
12
|
- Ler `.oxe/STATE.md` e, se existirem, `OVERVIEW.md` e `STACK.md` em `.oxe/codebase/` para não contradizer o repo.
|
|
11
13
|
- Não apagar `SPEC.md` / `PLAN.md` se existirem; este fluxo é paralelo ou temporário.
|
|
12
|
-
- **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
|
|
14
|
+
- **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
|
+
- **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"`).
|
|
13
16
|
</context>
|
|
14
17
|
|
|
18
|
+
<plan_driven_dynamic_agents_lean>
|
|
19
|
+
## Plan-Driven Dynamic Agents — lean (integrado ao Quick)
|
|
20
|
+
|
|
21
|
+
### Os três princípios que guiam este modo
|
|
22
|
+
|
|
23
|
+
**1. Spec-Driven Design**
|
|
24
|
+
O campo `## Objetivo` de **`QUICK.md`** é a **minispec**: define o que pode ser construído, os limites do escopo e o critério de "pronto" (bloco `## Verificar`). Nenhum agente pode adicionar escopo além desse objetivo. A minispec precede e restringe os agentes.
|
|
25
|
+
|
|
26
|
+
**2. Spec-Driven Development**
|
|
27
|
+
Os `## Passos` de **`QUICK.md`** são o **mini-plano**: cada passo é acionável, sequenciado e rastreável ao bloco `## Verificar`. Os agentes são **derivados dos passos** — os passos definem o trabalho; os agentes organizam quem faz o quê. Nunca o contrário.
|
|
28
|
+
|
|
29
|
+
**3. Plan-Driven Dynamic Agents**
|
|
30
|
+
Os agentes são criados **a partir dos passos**, **para esta demanda específica**, e são **invalidados** quando o quick termina ou é superado por um plano completo. Não há reuso de agentes entre demandas distintas. Cada new quick = novos agentes, se aplicável.
|
|
31
|
+
|
|
32
|
+
### Quando ativar PDDA no Quick
|
|
33
|
+
|
|
34
|
+
Ativar quando **qualquer** condição for verdadeira:
|
|
35
|
+
- Os passos tocam **2 ou mais domínios distintos** (ex.: API e UI, DB e cache, backend e CLI)
|
|
36
|
+
- O usuário pede explicitamente com `--agents`
|
|
37
|
+
- Há **5 ou mais passos** que se agrupam naturalmente em responsabilidades diferentes
|
|
38
|
+
|
|
39
|
+
**Não** ativar quando: todos os passos ficam no mesmo módulo ou camada, há ≤ 3 passos, ou o trabalho é puramente de conteúdo (docs, config).
|
|
40
|
+
|
|
41
|
+
**Se precisar de mais de 3 agentes:** o trabalho não é mais "quick" → promover para **`/oxe-plan-agent`**.
|
|
42
|
+
|
|
43
|
+
### Formato dos agentes no QUICK.md
|
|
44
|
+
|
|
45
|
+
Cada passo recebe uma anotação de agente (`<!-- agente: id -->`). Uma seção `## Agentes dinâmicos` é adicionada:
|
|
46
|
+
|
|
47
|
+
```markdown
|
|
48
|
+
## Agentes dinâmicos (lean PDDA)
|
|
49
|
+
> Derivados dos passos deste QUICK.md — spec-driven (objetivo restringe escopo) e plan-driven (passos definem tarefas).
|
|
50
|
+
> Criados para **esta demanda**. Invalidados ao promover para spec/plan ou ao iniciar novo quick.
|
|
51
|
+
|
|
52
|
+
| ID | Papel nesta demanda | Passos | Persona |
|
|
53
|
+
|----|---------------------|--------|---------|
|
|
54
|
+
| auth-backend | Especialista em JWT e middleware Express para este quick | 1–3 | executor |
|
|
55
|
+
| login-ui | Especialista em integração do formulário de login React | 4–5 | ui-specialist |
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Regras de desenho:**
|
|
59
|
+
- **`role`** deve ser específico ao domínio da demanda: não "Backend Developer" genérico, mas "Especialista em JWT para autenticação neste quick"
|
|
60
|
+
- **`persona`** usa as personas disponíveis: `executor`, `planner`, `verifier`, `researcher`, `debugger`, `architect`, `ui-specialist`, `db-specialist`
|
|
61
|
+
- Cada agente cobre steps **contíguos ou logicamente agrupados** (não intercalar responsabilidades)
|
|
62
|
+
- Máximo **3 agentes** por quick
|
|
63
|
+
|
|
64
|
+
### Arquivo `.oxe/quick-agents.json`
|
|
65
|
+
|
|
66
|
+
Criar junto ao QUICK.md quando PDDA estiver ativo (usar como base `oxe/templates/quick-agents.template.json`):
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"oxeQuickAgentsSchema": 1,
|
|
71
|
+
"quickId": "quick-<YYYY-MM-DD>-<6hex>",
|
|
72
|
+
"quickRef": ".oxe/QUICK.md",
|
|
73
|
+
"status": "active",
|
|
74
|
+
"since": "<ISO agora>",
|
|
75
|
+
"agents": [
|
|
76
|
+
{
|
|
77
|
+
"id": "auth-backend",
|
|
78
|
+
"role": "Especialista em JWT e middleware Express para este quick",
|
|
79
|
+
"persona": "executor",
|
|
80
|
+
"steps": [1, 2, 3],
|
|
81
|
+
"focus": "Implementar signing/verification de JWT e middleware de auth"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "login-ui",
|
|
85
|
+
"role": "Especialista em integração do formulário de login React",
|
|
86
|
+
"persona": "ui-specialist",
|
|
87
|
+
"steps": [4, 5],
|
|
88
|
+
"focus": "Integrar token JWT no componente Login e feedback de erro"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Lifecycle de `status`:** `active` → `done` (verify concluído com sucesso) | `invalidated` (novo quick/plan/plan-agent iniciado)
|
|
95
|
+
|
|
96
|
+
### Como `/oxe-execute` usa quick-agents
|
|
97
|
+
|
|
98
|
+
Quando **`quick-agents.json`** tiver `status: active` e QUICK.md existir:
|
|
99
|
+
- `/oxe-execute` adota o `role` e `persona` de cada agente para os steps atribuídos
|
|
100
|
+
- Cada agente trabalha **somente** nos steps listados em `steps[]`
|
|
101
|
+
- Não há protocolo de handoff entre agentes (lean: sem `.oxe/plan-agent-messages/`)
|
|
102
|
+
- Ao concluir todos os steps: sugerir `/oxe-verify` e marcar `quick-agents.json` → `status: done`
|
|
103
|
+
|
|
104
|
+
### Invalidação de quick-agents
|
|
105
|
+
|
|
106
|
+
| Evento | Ação sobre `quick-agents.json` |
|
|
107
|
+
|--------|-------------------------------|
|
|
108
|
+
| Novo `/oxe-quick` iniciado | `status: "invalidated"`, `reason: "novo quick"` |
|
|
109
|
+
| `/oxe-plan` ou `/oxe-plan-agent` chamado | `status: "invalidated"`, `reason: "promovido a plano"` |
|
|
110
|
+
| `/oxe-verify` confirma sucesso total | `status: "done"` |
|
|
111
|
+
| Invalidação manual pelo usuário | `status: "invalidated"`, `reason: "manual"` |
|
|
112
|
+
</plan_driven_dynamic_agents_lean>
|
|
113
|
+
|
|
15
114
|
## Perfil fast (modo trivial)
|
|
16
115
|
|
|
17
116
|
Uso **sem** novo slash: é o mesmo `/oxe-quick` com redação mínima.
|
|
@@ -19,6 +118,7 @@ Uso **sem** novo slash: é o mesmo `/oxe-quick` com redação mínima.
|
|
|
19
118
|
- **Objetivo** — uma frase no `.oxe/QUICK.md`.
|
|
20
119
|
- **Passos** — lista numerada, **máximo 10**; cada passo acionável numa linha.
|
|
21
120
|
- **Verificar** — um comando de terminal **ou** checklist manual explícito.
|
|
121
|
+
- **Agentes dinâmicos** — seção opcional quando PDDA estiver ativo (ver acima).
|
|
22
122
|
- **Promover para spec/plan?** — preencher sempre; se qualquer gatilho abaixo for verdadeiro, resposta **sim** e parar de acumular trabalho no QUICK — passar a **`/oxe-spec`** (e depois discuss/plan conforme config).
|
|
23
123
|
|
|
24
124
|
O perfil fast **não** é uma segunda trilha: continua sujeito à mesma promoção obrigatória quando o trabalho deixa de ser trivial.
|
|
@@ -31,6 +131,7 @@ Promova **nesta sessão ou na próxima** se **qualquer** condição for verdadei
|
|
|
31
131
|
- Mudança de **contrato público** (API HTTP, schema de dados exposto, eventos, SDK).
|
|
32
132
|
- **Segurança**, **dados pessoais**, **auth** ou **conformidade** envolvidos.
|
|
33
133
|
- O próprio quick ficar com **mais de 10 passos** — dividir ou passar a SPEC.
|
|
134
|
+
- PDDA lean precisaria de **mais de 3 agentes** — promover para **`/oxe-plan-agent`**.
|
|
34
135
|
|
|
35
136
|
No final de **`.oxe/QUICK.md`**, mantenha a linha:
|
|
36
137
|
|
|
@@ -40,20 +141,29 @@ Se **sim**, o próximo passo recomendado no chat é **`/oxe-spec`** (depois disc
|
|
|
40
141
|
|
|
41
142
|
<process>
|
|
42
143
|
1. Garantir `.oxe/` (usar template de STATE só se `STATE.md` não existir).
|
|
43
|
-
2.
|
|
44
|
-
|
|
144
|
+
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
|
+
- **Objetivo** — uma frase. *(Esta é a minispec: restringe o escopo de todos os agentes e passos.)*
|
|
45
147
|
- **Contexto** — 2–5 bullets (arquivos/pastas já vistos).
|
|
46
|
-
- **Passos** — lista numerada, **máximo 10** passos acionáveis.
|
|
47
|
-
- **
|
|
148
|
+
- **Passos** — lista numerada, **máximo 10** passos acionáveis; se PDDA ativo, anotar `<!-- agente: id -->` em cada passo.
|
|
149
|
+
- **Agentes dinâmicos** *(somente se PDDA ativo)* — tabela com ID, papel, steps, persona.
|
|
150
|
+
- **Verificar** — pelo menos um: comando de terminal (ex.: `npm test`) **ou** checklist manual explícito. *(Este é o critério de aceite da minispec.)*
|
|
48
151
|
- **Promover para spec/plan?** — conforme seção acima.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
152
|
+
4. Se PDDA ativo, criar **`.oxe/quick-agents.json`** usando `oxe/templates/quick-agents.template.json`:
|
|
153
|
+
- Gerar `quickId` novo (`quick-<YYYY-MM-DD>-<6hex>`).
|
|
154
|
+
- `status: "active"`, `since: "<ISO agora>"`.
|
|
155
|
+
- Preencher `agents[]` derivando de cada grupo de passos do QUICK.md.
|
|
156
|
+
5. Se existir **`.oxe/plan-agents.json`** com schema 2 e lifecycle ainda não `invalidated`, aplicar a invalidação descrita em **context** (actualizar JSON + **STATE.md** — blueprint de agentes).
|
|
157
|
+
6. Se existir **`.oxe/quick-agents.json`** anterior com `status` não-terminal, invalidá-lo (ver **context**).
|
|
158
|
+
7. Atualizar **`.oxe/STATE.md`**: fase `quick_active`, próximo passo `oxe:execute` ou implementação manual + `oxe:verify`; se PDDA ativo, registrar `quick_agents_status: active` e `quick_id: <quickId>`.
|
|
159
|
+
8. Responder no chat com resumo em ≤10 linhas: objetivo, passos, agentes (se PDDA ativo), verificação; se promover = sim, destacar **`/oxe-spec`** como próximo passo lógico; se blueprint plan-agent foi invalidado, mencionar **`/oxe-plan-agent`** para novo roteiro.
|
|
52
160
|
</process>
|
|
53
161
|
|
|
54
162
|
<success_criteria>
|
|
55
|
-
- [ ] `.oxe/QUICK.md` existe com passos e bloco **Verificar
|
|
163
|
+
- [ ] `.oxe/QUICK.md` existe com objetivo (minispec), passos (mini-plano) e bloco **Verificar** (critério de aceite).
|
|
56
164
|
- [ ] `STATE.md` reflete fase `quick_active` e próximo passo coerente.
|
|
57
165
|
- [ ] Fica explícito quando **promover** para spec/plan (regra acima + campo no arquivo).
|
|
58
166
|
- [ ] Se havia blueprint schema 2 activo, `plan-agents.json` e `STATE.md` reflectem **`invalidated`** por quick.
|
|
167
|
+
- [ ] Se PDDA ativo: `quick-agents.json` existe com `status: active`, `quickId` único, agentes com `role` específico à demanda, `steps` alinhados aos passos do QUICK.md; seção `## Agentes dinâmicos` presente no QUICK.md.
|
|
168
|
+
- [ ] Se PDDA ativo: máximo 3 agentes; se mais necessário, QUICK.md declara `Promover para spec/plan?: sim` com razão "necessita > 3 agentes".
|
|
59
169
|
</success_criteria>
|
|
@@ -78,6 +78,20 @@ Opcional: **`taskIds`** — subset das tarefas que esta mensagem cobre.
|
|
|
78
78
|
- **`/oxe-quick`** invalida o blueprint (`invalidatedBy: quick`); não reutilizar papéis do JSON no fluxo quick.
|
|
79
79
|
- Trabalho **fora** do conjunto de `Tn` do `PLAN.md`: não assumir persona do blueprint; opcionalmente pedir confirmação para invalidar (`invalidatedBy: out_of_scope`).
|
|
80
80
|
|
|
81
|
+
## Artefactos no repositório após fecho (recomendação OXE)
|
|
82
|
+
|
|
83
|
+
Durante a trilha ativa, **`plan-agents.json`** e **`.oxe/plan-agent-messages/`** na raiz de `.oxe/` são práticos (caminhos estáveis para **`/oxe-execute`**). Depois de **`lifecycle.closed`** (tipicamente após **`/oxe-verify`** com sucesso), estes ficheiros **deixam de ser necessários** para o dia a dia e **poluem** o explorador e o `git status` se ficarem sempre na raiz.
|
|
84
|
+
|
|
85
|
+
**Recomendação (equilíbrio entre limpeza e auditoria):**
|
|
86
|
+
|
|
87
|
+
1. **Arquivar por sessão (`runId`), não apagar** — Move-se o histórico para **`.oxe/archive/plan-agent-runs/<runId>/`**:
|
|
88
|
+
- **`messages/`** — todo o conteúdo actual de **`.oxe/plan-agent-messages/`** excepto um `README.md` de índice opcional (ou mover também o README antigo para dentro do arquivo).
|
|
89
|
+
- **`plan-agents.json`** — cópia final do blueprint **no momento do fecho** (o JSON na raiz `.oxe/` pode ser **removido** após cópia, ou substituído por um stub mínimo só se outra ferramenta exigir o path; o normal é remover da raiz após arquivo).
|
|
90
|
+
2. **Não commitar ruído sem querer** — Quem preferir **não** versionar handoffs: adicionar **`.oxe/archive/plan-agent-runs/`** ou **`.oxe/plan-agent-messages/`** ao **`.gitignore`** do projeto (trade-off: perde-se histórico no Git).
|
|
91
|
+
3. **Pastas por sessão desde o primeiro dia** (alternativa maior) — **`.oxe/plan-agent-runs/<runId>/messages/`** + **`plan-agents.json`** dentro da mesma pasta, com um **`plan-agents.active`** ou entrada em **STATE** a apontar o `runId` corrente. Exige alterar todos os workflows e o mental model dos agentes; reserve-se para uma evolução do pacote se a raiz `.oxe/` tiver de ficar sempre mínima.
|
|
92
|
+
|
|
93
|
+
**Resumo:** para o fluxo OXE actual, **arquivar em `.oxe/archive/plan-agent-runs/<runId>/` após verify OK** é a forma mais simples de “não precisarem mais existir na raiz” sem perder rastreabilidade. Apagar em massa só com **confirmação explícita** do utilizador.
|
|
94
|
+
|
|
81
95
|
## Ver também
|
|
82
96
|
|
|
83
97
|
- [`oxe/workflows/plan-agent.md`](../plan-agent.md)
|
package/oxe/workflows/scan.md
CHANGED
|
@@ -32,7 +32,15 @@ Se **`.oxe/config.json`** tiver `scan_focus_globs` ou `scan_ignore_globs`, **pri
|
|
|
32
32
|
- **CONVENTIONS.md** — estilo de código (naming, formatação, imports), padrões de erros/logging, organização de módulos; **prescreve** o que seguir em novas alterações (com paths em backticks).
|
|
33
33
|
- **CONCERNS.md** — dívida técnica, áreas frágeis, riscos de segurança/desempenho, dependências sensíveis; cada item com impacto breve e **arquivos** referenciados.
|
|
34
34
|
4. Atualizar **`.oxe/STATE.md`**: **Data** do scan (ISO), fase sugerida `scan_complete`, próximo passo `oxe:spec` ou `oxe:plan` se já houver SPEC.
|
|
35
|
-
5.
|
|
35
|
+
5. **Scale-adaptive** (se `scale_adaptive: true` em `.oxe/config.json` ou não configurado — ativo por padrão):
|
|
36
|
+
- Contar arquivos de código (excluindo `node_modules`, `dist`, `build`).
|
|
37
|
+
- Contar dependências diretas (se houver `package.json`, `pom.xml`, `go.mod`, etc.).
|
|
38
|
+
- Sugerir profile adequado no chat:
|
|
39
|
+
- **< 50 arquivos, < 10 dependências** → sugerir `profile: "fast"` no config.
|
|
40
|
+
- **50–500 arquivos** → sugerir `profile: "balanced"` (padrão).
|
|
41
|
+
- **> 500 arquivos ou sistema legado** → sugerir `profile: "strict"`.
|
|
42
|
+
- Se já houver `profile` no `.oxe/config.json`, não sugerir mudança — apenas confirmar.
|
|
43
|
+
6. Resumir em 5–10 linhas no chat: o que foi escrito, o próximo passo sugerido, e (se scale-adaptive ativo) o profile recomendado.
|
|
36
44
|
</process>
|
|
37
45
|
|
|
38
46
|
<success_criteria>
|
package/oxe/workflows/spec.md
CHANGED
|
@@ -1,42 +1,191 @@
|
|
|
1
1
|
# OXE — Workflow: spec
|
|
2
2
|
|
|
3
3
|
<objective>
|
|
4
|
-
|
|
4
|
+
Conduzir as **5 fases** do processo de especificação e produzir dois artefatos:
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
1. **`.oxe/SPEC.md`** — contrato formal com critérios de aceite estáveis (A1, A2, …) e coluna **Como verificar**.
|
|
7
|
+
2. **`.oxe/ROADMAP.md`** — fases de entrega mapeadas a requisitos (R-ID) e critérios (A*).
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
**Foco em redução de requisições:** as fases são estruturadas para extrair o máximo de informação por rodada — nunca uma pergunta por vez, sempre blocos coesos.
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
Para trabalho **muito pequeno** que não justifica spec completa: redirecionar para **`oxe:quick`**.
|
|
12
|
+
|
|
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.
|
|
11
14
|
</objective>
|
|
12
15
|
|
|
13
16
|
<context>
|
|
14
|
-
**Pré-requisito:**
|
|
15
|
-
|
|
16
|
-
Leia `.oxe/STATE.md` e, se existirem, trechos relevantes de `.oxe/codebase/OVERVIEW.md` e `STACK.md` para não contradizer o projeto real.
|
|
17
|
+
**Pré-requisito preferível:** scan executado. Se não existir, mencionar na spec que o mapa está pendente.
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
Ler no início:
|
|
20
|
+
- `.oxe/STATE.md` — fase atual, decisões, workstream ativo
|
|
21
|
+
- `.oxe/codebase/OVERVIEW.md` e `STACK.md` se existirem — não contradizer o repo
|
|
22
|
+
- **`.oxe/OBSERVATIONS.md`** — se houver entradas `pendente` com impacto `spec` ou `all`, incorporá-las na Fase 3 (Requisitos) e marcá-las `incorporada → spec (data)` após uso
|
|
19
23
|
|
|
20
|
-
**Brownfield (COBOL, JCL, copybooks, VB6, SP):** quando o objetivo for documentar ou planear migração, ver **`oxe/workflows/references/legacy-brownfield.md`** —
|
|
24
|
+
**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.
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
Usar templates: **`oxe/templates/SPEC.template.md`** e **`oxe/templates/ROADMAP.template.md`**.
|
|
23
27
|
</context>
|
|
24
28
|
|
|
29
|
+
<fase_1_perguntas>
|
|
30
|
+
## Fase 1 — Perguntas
|
|
31
|
+
|
|
32
|
+
**Objetivo:** entender completamente a ideia antes de qualquer escrita de artefato.
|
|
33
|
+
|
|
34
|
+
**Regra de ouro:** nunca uma pergunta por vez — sempre um **bloco coeso** de 3-5 perguntas por rodada. Máximo **3 rodadas**; sinalize quando achar que tem entendimento completo e peça confirmação antes de avançar.
|
|
35
|
+
|
|
36
|
+
**Blocos de perguntas (adaptar ao contexto):**
|
|
37
|
+
|
|
38
|
+
*Bloco A — Objetivo e motivação:*
|
|
39
|
+
- Qual o problema central que isso resolve? Quem se beneficia?
|
|
40
|
+
- Há uma solução atual (mesmo que ruim)? O que falha nela?
|
|
41
|
+
- Como o sucesso será medido — qual o indicador mais importante?
|
|
42
|
+
|
|
43
|
+
*Bloco B — Restrições e tecnologia:*
|
|
44
|
+
- Quais tecnologias ou frameworks são obrigatórios ou proibidos?
|
|
45
|
+
- Há restrições de prazo, orçamento, tamanho do time ou infraestrutura?
|
|
46
|
+
- Quais integrações existentes precisam ser mantidas?
|
|
47
|
+
|
|
48
|
+
*Bloco C — Casos extremos e escopo:*
|
|
49
|
+
- Quais cenários de erro ou casos extremos são críticos de tratar na v1?
|
|
50
|
+
- O que definitivamente está **fora** do escopo desta entrega?
|
|
51
|
+
- Há comportamento esperado que você sabe que não é óbvio?
|
|
52
|
+
|
|
53
|
+
**Estratégia de rodadas:**
|
|
54
|
+
- Rodada 1: blocos A + B (entendimento geral)
|
|
55
|
+
- Rodada 2: bloco C + clarificações específicas (se necessário)
|
|
56
|
+
- Rodada 3 (máx): apenas se ainda houver ambiguidade crítica
|
|
57
|
+
- Após rodada 3: avançar para Fase 2 mesmo com suposições explícitas
|
|
58
|
+
|
|
59
|
+
**Ao final:** "Acho que entendi completamente. Confirma antes de avançarmos para pesquisa/requisitos? [resumo em 3-5 bullets]"
|
|
60
|
+
</fase_1_perguntas>
|
|
61
|
+
|
|
62
|
+
<fase_2_pesquisa>
|
|
63
|
+
## Fase 2 — Pesquisa (opcional, recomendada)
|
|
64
|
+
|
|
65
|
+
**Objetivo:** investigar domínios incertos antes de escrever requisitos.
|
|
66
|
+
|
|
67
|
+
**Proposta ao usuário:** com base na Fase 1, listar 2-4 áreas de investigação sugeridas e perguntar quais investigar. Exemplos:
|
|
68
|
+
- "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?"
|
|
69
|
+
|
|
70
|
+
**Se aprovado:**
|
|
71
|
+
- Criar notas de pesquisa datadas em `.oxe/research/YYYY-MM-DD-<slug>.md` (usar fluxo de `research.md`)
|
|
72
|
+
- Atualizar `.oxe/RESEARCH.md` com índice
|
|
73
|
+
- Consolidar descobertas relevantes antes de avançar para Fase 3
|
|
74
|
+
|
|
75
|
+
**Se pulado:** registrar em `SPEC.md` as áreas de incerteza como suposições explícitas.
|
|
76
|
+
|
|
77
|
+
**Explorações grandes / sistemas legado:** ver **`oxe/workflows/references/legacy-brownfield.md`** — progressive disclosure por área, multiple sessions, epicos por trilha.
|
|
78
|
+
</fase_2_pesquisa>
|
|
79
|
+
|
|
80
|
+
<fase_3_requisitos>
|
|
81
|
+
## Fase 3 — Requisitos
|
|
82
|
+
|
|
83
|
+
**Objetivo:** extrair uma tabela clara de requisitos com versionamento (v1/v2/fora).
|
|
84
|
+
|
|
85
|
+
**Incorporar primeiro:** verificar `.oxe/OBSERVATIONS.md` por entradas `pendente` com impacto `spec` ou `all` — incorporar aqui antes de finalizar a tabela.
|
|
86
|
+
|
|
87
|
+
**Formato da tabela:**
|
|
88
|
+
|
|
89
|
+
| R-ID | Requisito | Versão | Critério de aceite |
|
|
90
|
+
|------|-----------|--------|--------------------|
|
|
91
|
+
| R1 | [o que o sistema deve fazer] | v1 | A1 — [como verificar] |
|
|
92
|
+
| R2 | [outro requisito] | v1 | A2 — [como verificar] |
|
|
93
|
+
| R3 | [requisito futuro] | v2 | A3 — [quando implementado] |
|
|
94
|
+
| R4 | [fora do escopo] | fora | — |
|
|
95
|
+
|
|
96
|
+
**Definições:**
|
|
97
|
+
- **v1** = MVP essencial; entra no próximo `/oxe-plan`
|
|
98
|
+
- **v2** = evolução futura; entra em ciclos seguintes
|
|
99
|
+
- **fora** = explicitamente descartado desta entrega
|
|
100
|
+
|
|
101
|
+
**Apresentar ao usuário para validação** antes de avançar para Fase 4. Se ajustar: atualizar tabela e repetir até aprovação.
|
|
102
|
+
</fase_3_requisitos>
|
|
103
|
+
|
|
104
|
+
<fase_4_roteiro>
|
|
105
|
+
## Fase 4 — Roteiro
|
|
106
|
+
|
|
107
|
+
**Objetivo:** criar fases de entrega mapeadas aos requisitos v1 e escrever `.oxe/ROADMAP.md`.
|
|
108
|
+
|
|
109
|
+
**Lógica de agrupamento:**
|
|
110
|
+
- Agrupar requisitos v1 em fases por **dependência técnica** e **valor entregável**
|
|
111
|
+
- Cada fase deve ter resultado demonstrável (não apenas código interno)
|
|
112
|
+
- Fase 1 = o que `/oxe-plan` implementará no próximo ciclo
|
|
113
|
+
- Fases 2+ = ciclos futuros de spec→plan→execute→verify
|
|
114
|
+
|
|
115
|
+
**Escrever `.oxe/ROADMAP.md`** usando `oxe/templates/ROADMAP.template.md`:
|
|
116
|
+
|
|
117
|
+
```markdown
|
|
118
|
+
---
|
|
119
|
+
oxe_doc: roadmap
|
|
120
|
+
status: draft
|
|
121
|
+
updated: <data>
|
|
122
|
+
spec_ref: .oxe/SPEC.md
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Fase 1 — [Nome]
|
|
126
|
+
**Requisitos:** R1, R3
|
|
127
|
+
**Critérios de aceite:** A1, A2, A3
|
|
128
|
+
**Escopo:** ...
|
|
129
|
+
|
|
130
|
+
## Fase 2 — [Nome]
|
|
131
|
+
**Requisitos:** R2, R5
|
|
132
|
+
**Critérios de aceite:** A4, A5
|
|
133
|
+
**Escopo:** ...
|
|
134
|
+
|
|
135
|
+
## Fora do escopo (v2+)
|
|
136
|
+
- R4: [descrição] — motivo
|
|
137
|
+
```
|
|
138
|
+
</fase_4_roteiro>
|
|
139
|
+
|
|
140
|
+
<fase_5_aprovacao>
|
|
141
|
+
## Fase 5 — Aprovação e próximo passo
|
|
142
|
+
|
|
143
|
+
**Objetivo:** confirmar o roteiro com o usuário e redirecionar para o plano.
|
|
144
|
+
|
|
145
|
+
**Apresentar resumo:**
|
|
146
|
+
- Objetivo em 1 frase
|
|
147
|
+
- Requisitos v1 (N itens), v2 (M itens), fora (K itens)
|
|
148
|
+
- Roteiro: Fase 1 → N critérios; Fase 2 → M critérios
|
|
149
|
+
- Critérios de aceite da Fase 1: A1, A2, …
|
|
150
|
+
|
|
151
|
+
**Perguntar ao usuário:**
|
|
152
|
+
> "Roteiro aprovado? Quer gerar o plano agora ou ajustar algo antes?"
|
|
153
|
+
|
|
154
|
+
**Se aprovado — oferecer os próximos passos:**
|
|
155
|
+
|
|
156
|
+
| Opção | Quando usar | Próximo passo |
|
|
157
|
+
|-------|-------------|---------------|
|
|
158
|
+
| Plano simples | Tarefa clara, sem orquestração multi-agente | `/oxe-plan` |
|
|
159
|
+
| Plano com agentes | Time distribuído, domínios distintos, ondas paralelas | `/oxe-plan-agent` |
|
|
160
|
+
| Discutir antes | `discuss_before_plan: true` em config, ou risco técnico | `/oxe-discuss` → `/oxe-plan` |
|
|
161
|
+
|
|
162
|
+
**Se ajustar:** voltar à fase indicada (Requisitos, Roteiro ou Perguntas) e repetir.
|
|
163
|
+
|
|
164
|
+
**Ao finalizar:**
|
|
165
|
+
- Marcar `ROADMAP.md` → `status: approved`
|
|
166
|
+
- Atualizar `STATE.md`: `phase: spec_ready`, próximo passo conforme escolha
|
|
167
|
+
</fase_5_aprovacao>
|
|
168
|
+
|
|
25
169
|
<process>
|
|
26
|
-
1.
|
|
27
|
-
2.
|
|
28
|
-
3.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
170
|
+
1. Ler `.oxe/STATE.md`, `OVERVIEW.md`, `STACK.md` e `.oxe/OBSERVATIONS.md` (verificar pendentes).
|
|
171
|
+
2. **Fase 1 — Perguntas:** enviar bloco coeso de 3-5 perguntas; máx 3 rodadas; confirmar entendimento.
|
|
172
|
+
3. **Fase 2 — Pesquisa:** propor áreas de investigação; aguardar aprovação; executar se aprovado.
|
|
173
|
+
4. **Fase 3 — Requisitos:** extrair tabela R-ID com v1/v2/fora e critérios A*; incorporar OBS pendentes; apresentar para validação.
|
|
174
|
+
5. **Fase 4 — Roteiro:** agrupar requisitos v1 em fases; escrever `.oxe/ROADMAP.md`.
|
|
175
|
+
6. Escrever **`.oxe/SPEC.md`** usando `oxe/templates/SPEC.template.md`:
|
|
176
|
+
- Frontmatter YAML (`oxe_doc: spec`, `status`, `updated`, `inputs`)
|
|
177
|
+
- Objetivo, Escopo (dentro/fora), Critérios de aceite (tabela A*), Suposições e riscos, Referências
|
|
178
|
+
- Preservar chaves existentes se SPEC.md já existir; atualizar `updated:`
|
|
179
|
+
7. **Fase 5 — Aprovação:** apresentar resumo, aguardar aprovação do roteiro, redirecionar.
|
|
180
|
+
8. Atualizar **`.oxe/STATE.md`**: `phase: spec_ready`, próximo passo.
|
|
181
|
+
9. Marcar OBS incorporadas em `.oxe/OBSERVATIONS.md` se houver pendentes de impacto `spec`.
|
|
36
182
|
</process>
|
|
37
183
|
|
|
38
184
|
<success_criteria>
|
|
39
|
-
- [ ] `.oxe/SPEC.md` existe
|
|
40
|
-
- [ ]
|
|
41
|
-
- [ ]
|
|
185
|
+
- [ ] `.oxe/SPEC.md` existe com critérios A* e coluna Como verificar; `STATE.md` atualizado.
|
|
186
|
+
- [ ] `.oxe/ROADMAP.md` existe com fases mapeadas a R-IDs e A*, status `approved` (ou `draft` se usuário não confirmou).
|
|
187
|
+
- [ ] Tabela de requisitos R-ID foi apresentada e validada (v1/v2/fora) antes do roteiro.
|
|
188
|
+
- [ ] Usuário foi consultado no gate da Fase 5 e escolheu o próximo passo.
|
|
189
|
+
- [ ] OBS pendentes com impacto `spec` foram incorporadas e marcadas `incorporada`.
|
|
190
|
+
- [ ] Máximo 3 rodadas de perguntas utilizadas — não mais.
|
|
42
191
|
</success_criteria>
|