oxe-cc 1.4.1 → 1.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.
Files changed (36) hide show
  1. package/.cursor/commands/oxe-verify-audit.md +46 -0
  2. package/.cursor/commands/oxe-workflow-authoring.md +47 -0
  3. package/.github/prompts/oxe-compact.prompt.md +1 -1
  4. package/.github/prompts/oxe-plan-agent.prompt.md +1 -0
  5. package/.github/prompts/oxe-verify-audit.prompt.md +46 -0
  6. package/.github/prompts/oxe-workflow-authoring.prompt.md +47 -0
  7. package/.github/workflows/ci.yml +1 -0
  8. package/.github/workflows/release.yml +1 -0
  9. package/AGENTS.md +3 -1
  10. package/CHANGELOG.md +25 -0
  11. package/QUICKSTART.md +99 -0
  12. package/README.md +19 -10
  13. package/bin/lib/oxe-install-resolve.cjs +10 -0
  14. package/bin/lib/oxe-operational.cjs +34 -28
  15. package/bin/lib/oxe-project-health.cjs +38 -6
  16. package/bin/lib/oxe-release.cjs +423 -0
  17. package/bin/oxe-cc.js +389 -294
  18. package/commands/oxe/verify-audit.md +50 -0
  19. package/commands/oxe/workflow-authoring.md +50 -0
  20. package/docs/INCIDENT-PLAYBOOK.md +181 -0
  21. package/docs/RELEASE-READINESS.md +46 -0
  22. package/docs/ROLES.md +129 -0
  23. package/docs/RUNTIME-SMOKE-MATRIX.md +128 -0
  24. package/docs/TEAM-ADOPTION.md +153 -0
  25. package/docs/WALKTHROUGH.md +241 -0
  26. package/lib/runtime/scheduler/multi-agent-coordinator.d.ts +28 -0
  27. package/lib/runtime/scheduler/multi-agent-coordinator.js +152 -26
  28. package/lib/sdk/README.md +2 -0
  29. package/lib/sdk/index.cjs +22 -8
  30. package/lib/sdk/index.d.ts +60 -16
  31. package/oxe/templates/config.template.json +1 -0
  32. package/package.json +28 -20
  33. package/packages/runtime/package.json +1 -1
  34. package/packages/runtime/src/scheduler/multi-agent-coordinator.ts +357 -193
  35. package/vscode-extension/oxe-agents-1.5.0.vsix +0 -0
  36. package/vscode-extension/package.json +1 -1
@@ -0,0 +1,46 @@
1
+ ---
2
+ description: "OXE — Auditoria adversarial de VERIFY.md (Verify Auditor)"
3
+ oxe_workflow_slug: verify-audit
4
+ oxe_reasoning_mode: review
5
+ oxe_question_policy: none
6
+ oxe_output_contract: findings
7
+ oxe_tool_profile: review_heavy
8
+ oxe_confidence_policy: explicit
9
+ oxe_context_tier: standard
10
+ oxe_contract_version: 2.0.0
11
+ oxe_semantics_hash: da71d7eafdce81aa
12
+ ---
13
+
14
+ OXE — Auditoria adversarial de VERIFY.md (Verify Auditor)
15
+
16
+ <!-- oxe-reasoning-contract:start -->
17
+
18
+ **Contrato de raciocínio OXE deste comando**
19
+ - **Workflow:** verify-audit
20
+ - **Modo:** revisão
21
+ - **Perguntas:** nenhuma
22
+ - **Saída esperada:** achados
23
+ - **Perfil de ferramentas:** revisão intensa
24
+ - **Política de confiança:** explícita
25
+ - **Tier de contexto padrão:** padrão
26
+ - **Versão do contrato:** 2.0.0
27
+ - **Checksum semântico:** `da71d7eafdce81aa`
28
+ - **Entrada de contexto prioritária:** `.oxe/context/packs/verify-audit.md` e `.oxe/context/packs/verify-audit.json`
29
+ - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
30
+ - **Inspeção estruturada:** `oxe-cc context inspect --workflow verify-audit --json`
31
+ - Apresentar findings primeiro, ordenados por severidade e evidência.
32
+ - Separar bug, risco, regressão e lacuna de teste.
33
+ - Se não houver findings, declarar isso explicitamente e listar riscos residuais.
34
+ - **Seções esperadas:** Findings · Perguntas abertas · Riscos residuais · Resumo
35
+ - **Bloqueios formais:** missing:state
36
+ - **Referência canónica:** `oxe/workflows/references/reasoning-review.md`
37
+
38
+ <!-- oxe-reasoning-contract:end -->
39
+
40
+ <!-- oxe-workflow-resolution:start -->
41
+
42
+ **Resolução do workflow canónico:** a partir do CWD atual, subir diretórios até encontrar .oxe/workflows/verify-audit.md ou oxe/workflows/verify-audit.md. Ler e aplicar integralmente o primeiro ficheiro encontrado. Não assumir que o CWD já é a raiz do repositório. Se nenhum existir, reportar os paths tentados e parar.
43
+
44
+ <!-- oxe-workflow-resolution:end -->
45
+
46
+ Opera com contexto propositalmente restrito: só `SPEC.md` (critérios A*) e `VERIFY.md`. Escreve a seção `## Auditoria Adversarial` no VERIFY.md com resultado APROVADO / CONDICIONADO / REPROVADO.
@@ -0,0 +1,47 @@
1
+ ---
2
+ description: "OXE — Revisa um workflow contra o guia de autoria"
3
+ argument-hint: "<path/to/workflow.md>"
4
+ oxe_workflow_slug: workflow-authoring
5
+ oxe_reasoning_mode: review
6
+ oxe_question_policy: none
7
+ oxe_output_contract: findings
8
+ oxe_tool_profile: review_heavy
9
+ oxe_confidence_policy: explicit
10
+ oxe_context_tier: standard
11
+ oxe_contract_version: 2.0.0
12
+ oxe_semantics_hash: 430a364fe5aa3494
13
+ ---
14
+
15
+ OXE — Revisa um workflow contra o guia de autoria
16
+
17
+ <!-- oxe-reasoning-contract:start -->
18
+
19
+ **Contrato de raciocínio OXE deste comando**
20
+ - **Workflow:** workflow-authoring
21
+ - **Modo:** revisão
22
+ - **Perguntas:** nenhuma
23
+ - **Saída esperada:** achados
24
+ - **Perfil de ferramentas:** revisão intensa
25
+ - **Política de confiança:** explícita
26
+ - **Tier de contexto padrão:** padrão
27
+ - **Versão do contrato:** 2.0.0
28
+ - **Checksum semântico:** `430a364fe5aa3494`
29
+ - **Entrada de contexto prioritária:** `.oxe/context/packs/workflow-authoring.md` e `.oxe/context/packs/workflow-authoring.json`
30
+ - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
+ - **Inspeção estruturada:** `oxe-cc context inspect --workflow workflow-authoring --json`
32
+ - Apresentar findings primeiro, ordenados por severidade e evidência.
33
+ - Separar bug, risco, regressão e lacuna de teste.
34
+ - Se não houver findings, declarar isso explicitamente e listar riscos residuais.
35
+ - **Seções esperadas:** Findings · Perguntas abertas · Riscos residuais · Resumo
36
+ - **Bloqueios formais:** missing:state
37
+ - **Referência canónica:** `oxe/workflows/references/reasoning-review.md`
38
+
39
+ <!-- oxe-reasoning-contract:end -->
40
+
41
+ <!-- oxe-workflow-resolution:start -->
42
+
43
+ **Resolução do workflow canónico:** a partir do CWD atual, subir diretórios até encontrar .oxe/workflows/workflow-authoring.md ou oxe/workflows/workflow-authoring.md. Ler e aplicar integralmente o primeiro ficheiro encontrado. Não assumir que o CWD já é a raiz do repositório. Se nenhum existir, reportar os paths tentados e parar.
44
+
45
+ <!-- oxe-workflow-resolution:end -->
46
+
47
+ Indica o path do workflow a revisar (ex.: `oxe/workflows/spec.md`). Se omitido, o agente vai pedir.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oxe-compact
3
- mode: agent
3
+ agent: agent
4
4
  description: OXE — refresh .oxe/codebase vs repo + CODEBASE-DELTA + RESUME
5
5
  oxe_workflow_slug: compact
6
6
  oxe_reasoning_mode: discovery
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  name: oxe-plan-agent
3
+ agent: agent
3
4
  description: "OXE — PLAN.md + plan-agents.json (plano orientado a agentes / ondas)"
4
5
  oxe_workflow_slug: plan-agent
5
6
  oxe_reasoning_mode: planning
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: oxe-verify-audit
3
+ agent: agent
4
+ description: OXE — Auditoria adversarial de VERIFY.md (Verify Auditor)
5
+ oxe_workflow_slug: verify-audit
6
+ oxe_reasoning_mode: review
7
+ oxe_question_policy: none
8
+ oxe_output_contract: findings
9
+ oxe_tool_profile: review_heavy
10
+ oxe_confidence_policy: explicit
11
+ oxe_context_tier: standard
12
+ oxe_contract_version: 2.0.0
13
+ oxe_semantics_hash: da71d7eafdce81aa
14
+ ---
15
+
16
+ <!-- oxe-reasoning-contract:start -->
17
+
18
+ **Contrato de raciocínio OXE deste comando**
19
+ - **Workflow:** verify-audit
20
+ - **Modo:** revisão
21
+ - **Perguntas:** nenhuma
22
+ - **Saída esperada:** achados
23
+ - **Perfil de ferramentas:** revisão intensa
24
+ - **Política de confiança:** explícita
25
+ - **Tier de contexto padrão:** padrão
26
+ - **Versão do contrato:** 2.0.0
27
+ - **Checksum semântico:** `da71d7eafdce81aa`
28
+ - **Entrada de contexto prioritária:** `.oxe/context/packs/verify-audit.md` e `.oxe/context/packs/verify-audit.json`
29
+ - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
30
+ - **Inspeção estruturada:** `oxe-cc context inspect --workflow verify-audit --json`
31
+ - Apresentar findings primeiro, ordenados por severidade e evidência.
32
+ - Separar bug, risco, regressão e lacuna de teste.
33
+ - Se não houver findings, declarar isso explicitamente e listar riscos residuais.
34
+ - **Seções esperadas:** Findings · Perguntas abertas · Riscos residuais · Resumo
35
+ - **Bloqueios formais:** missing:state
36
+ - **Referência canónica:** `oxe/workflows/references/reasoning-review.md`
37
+
38
+ <!-- oxe-reasoning-contract:end -->
39
+
40
+ <!-- oxe-workflow-resolution:start -->
41
+
42
+ **Resolução do workflow canónico:** a partir do CWD atual, subir diretórios até encontrar .oxe/workflows/verify-audit.md ou oxe/workflows/verify-audit.md. Ler e aplicar integralmente o primeiro ficheiro encontrado. Não assumir que o CWD já é a raiz do repositório. Se nenhum existir, reportar os paths tentados e parar.
43
+
44
+ <!-- oxe-workflow-resolution:end -->
45
+
46
+ Opera com contexto propositalmente restrito: só `SPEC.md` (critérios A*) e `VERIFY.md`. Escreve a seção `## Auditoria Adversarial` no VERIFY.md com resultado APROVADO / CONDICIONADO / REPROVADO.
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: oxe-workflow-authoring
3
+ agent: agent
4
+ description: "OXE — Revisa um workflow contra o guia de autoria"
5
+ argument-hint: "<path/to/workflow.md>"
6
+ oxe_workflow_slug: workflow-authoring
7
+ oxe_reasoning_mode: review
8
+ oxe_question_policy: none
9
+ oxe_output_contract: findings
10
+ oxe_tool_profile: review_heavy
11
+ oxe_confidence_policy: explicit
12
+ oxe_context_tier: standard
13
+ oxe_contract_version: 2.0.0
14
+ oxe_semantics_hash: 430a364fe5aa3494
15
+ ---
16
+
17
+ <!-- oxe-reasoning-contract:start -->
18
+
19
+ **Contrato de raciocínio OXE deste comando**
20
+ - **Workflow:** workflow-authoring
21
+ - **Modo:** revisão
22
+ - **Perguntas:** nenhuma
23
+ - **Saída esperada:** achados
24
+ - **Perfil de ferramentas:** revisão intensa
25
+ - **Política de confiança:** explícita
26
+ - **Tier de contexto padrão:** padrão
27
+ - **Versão do contrato:** 2.0.0
28
+ - **Checksum semântico:** `430a364fe5aa3494`
29
+ - **Entrada de contexto prioritária:** `.oxe/context/packs/workflow-authoring.md` e `.oxe/context/packs/workflow-authoring.json`
30
+ - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
+ - **Inspeção estruturada:** `oxe-cc context inspect --workflow workflow-authoring --json`
32
+ - Apresentar findings primeiro, ordenados por severidade e evidência.
33
+ - Separar bug, risco, regressão e lacuna de teste.
34
+ - Se não houver findings, declarar isso explicitamente e listar riscos residuais.
35
+ - **Seções esperadas:** Findings · Perguntas abertas · Riscos residuais · Resumo
36
+ - **Bloqueios formais:** missing:state
37
+ - **Referência canónica:** `oxe/workflows/references/reasoning-review.md`
38
+
39
+ <!-- oxe-reasoning-contract:end -->
40
+
41
+ <!-- oxe-workflow-resolution:start -->
42
+
43
+ **Resolução do workflow canónico:** a partir do CWD atual, subir diretórios até encontrar .oxe/workflows/workflow-authoring.md ou oxe/workflows/workflow-authoring.md. Ler e aplicar integralmente o primeiro ficheiro encontrado. Não assumir que o CWD já é a raiz do repositório. Se nenhum existir, reportar os paths tentados e parar.
44
+
45
+ <!-- oxe-workflow-resolution:end -->
46
+
47
+ Indica o path do workflow a revisar (ex.: `oxe/workflows/spec.md`). Se omitido, o agente vai pedir.
@@ -18,6 +18,7 @@ jobs:
18
18
  - run: npm ci
19
19
  - run: npm test
20
20
  - run: npm run scan:assets
21
+ - run: npm run release:doctor
21
22
 
22
23
  doctor:
23
24
  runs-on: ubuntu-latest
@@ -17,6 +17,7 @@ jobs:
17
17
  - run: npm ci
18
18
  - run: npm test
19
19
  - run: npm run scan:assets
20
+ - run: npm run release:doctor
20
21
  - run: node bin/oxe-cc.js --version
21
22
 
22
23
  publish-npm:
package/AGENTS.md CHANGED
@@ -4,7 +4,7 @@ Este repositório empacota o fluxo **OXE** (spec-driven, artefatos em `.oxe/`).
4
4
 
5
5
  - **npm:** `npx oxe-cc@latest` · pacote `oxe-cc` · [README.md](README.md)
6
6
  - **Workflows canónicos:** [oxe/workflows/](oxe/workflows/) — editar aqui primeiro; todas as integrações apontam para estes ficheiros. Referência **legado / brownfield:** [oxe/workflows/references/legacy-brownfield.md](oxe/workflows/references/legacy-brownfield.md).
7
- - **CLI:** `oxe-cc install | doctor | status | init-oxe | update | uninstall` + `oxe-cc runtime <status|compile|verify|gates|replay|recover|ci|promote|agents>` — ver [README.md](README.md#cli-oxe-cc).
7
+ - **CLI:** `oxe-cc install | doctor | doctor --release | status | init-oxe | update | uninstall` + `oxe-cc runtime <status|compile|verify|gates|replay|recover|ci|promote|agents>` — ver [README.md](README.md#cli-oxe-cc).
8
8
  - **SDK:** `require('oxe-cc')` expõe `runDoctorChecks`, `health`, `workflows`, `install`, `manifest`, `agents`, `verifyRun` e bridges `operational.*` do runtime enterprise — ver [lib/sdk/README.md](lib/sdk/README.md).
9
9
 
10
10
  ---
@@ -98,3 +98,5 @@ Quando o utilizador pedir uma etapa OXE por linguagem natural, seguir o ficheiro
98
98
  Os wrappers por runtime podem carregar metadata cognitiva (`oxe_reasoning_mode`, `oxe_question_policy`, `oxe_output_contract`, `oxe_tool_profile`, `oxe_confidence_policy`), mas o comportamento canónico continua no workflow. Use essa metadata para adaptar a postura do agente sem bifurcar a lógica do OXE por ferramenta.
99
99
 
100
100
  Para `execute` e `verify`, o comportamento atual esperado é **runtime-first**: se `oxe-cc runtime` estiver disponível, preferir `runtime compile/project/verify/gates` e tratar markdown como projeção derivada; se o runtime não puder ser executado, declarar `fallback legado` explicitamente.
101
+
102
+ Para publicação, o gate local esperado passa por `oxe-cc doctor --release --write-manifest`. Essa verificação deve falhar se houver drift de versão, topo inválido no `CHANGELOG`, wrapper dirty após sync, runtime não compilado ou ausência dos relatórios `.oxe/release/*.json` exigidos pela release.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,31 @@ Todas as versões seguem [Semantic Versioning](https://semver.org/). As mudança
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.5.0] — 2026-04-21
8
+
9
+ ### Release Readiness 5/5
10
+
11
+ - `doctor --release --write-manifest` virou gate formal de publicação, com verificação bloqueante de versões, topo do `CHANGELOG`, runtime compilado, wrapper sync e relatórios obrigatórios
12
+ - a release agora persiste `release-manifest.json`, `runtime-smoke-report.json`, `recovery-fixture-report.json` e `multi-agent-soak-report.json` em `.oxe/release/`
13
+ - `npm test` passou a incluir smoke matrix multi-runtime, fixtures reproduzíveis de recovery/incidente e soak multi-agent
14
+
15
+ ### Operational Proof
16
+
17
+ - nova smoke matrix obrigatória para Cursor, Copilot VS Code, Claude Code, Codex, OpenCode, Gemini, Windsurf e Antigravity, cobrindo install, entrypoint `oxe`, resolução de workflow e uninstall granular
18
+ - novo corpus de incidentes em `tests/fixtures/runtime-incidents/` para provar `runtime replay` e `runtime recover` fora do caminho feliz
19
+ - multi-agent passou a gerar e auditar `multi-agent-summary.json`, incluindo timeouts e reassignments
20
+
21
+ ### Publication Contract
22
+
23
+ - versão alinhada para `1.5.0` em pacote raiz, runtime package, extensão VS Code, README e lockfile
24
+ - README, AGENTS e SDK docs atualizados para refletir o gate de release, os relatórios obrigatórios e o contrato estável desta publicação
25
+
26
+ ### Validation
27
+
28
+ - `npm test`
29
+ - `npm run scan:assets`
30
+ - `npm run release:doctor`
31
+
7
32
  ## [1.4.0] — 2026-04-20
8
33
 
9
34
  ### Runtime Publication Stabilization
package/QUICKSTART.md ADDED
@@ -0,0 +1,99 @@
1
+ # OXE — Primeiros 15 Minutos
2
+
3
+ > Leitura: ~5 min. Você sai daqui com o projeto configurado e o primeiro ciclo rodando.
4
+
5
+ ---
6
+
7
+ ## 1. Instalar
8
+
9
+ ```bash
10
+ npx oxe-cc@latest
11
+ ```
12
+
13
+ Responda as perguntas do wizard (IDE, perfil, workstream). O OXE cria `.oxe/` no projeto com STATE.md, config.json e os workflows.
14
+
15
+ Verifique:
16
+
17
+ ```bash
18
+ npx oxe-cc doctor
19
+ ```
20
+
21
+ Deve mostrar `✓ Pronto` para Node, workflows e estrutura base. Se aparecer algum `⚠`, siga o conselho na linha.
22
+
23
+ ---
24
+
25
+ ## 2. Primeiro ciclo (modo padrão)
26
+
27
+ Execute na sua IDE (Cursor, Copilot, Claude Code, etc.):
28
+
29
+ ```
30
+ /oxe
31
+ ```
32
+
33
+ O router lê STATE.md e sugere exatamente um próximo passo. Siga a recomendação.
34
+
35
+ **Sequência mínima completa:**
36
+
37
+ ```
38
+ /oxe → descobre onde você está
39
+ /oxe-scan → mapeia o codebase em .oxe/codebase/
40
+ /oxe-spec → gera SPEC.md com critérios de aceite
41
+ /oxe-plan → gera PLAN.md com ondas e tarefas
42
+ /oxe-execute → implementa a onda atual
43
+ /oxe-verify → valida os critérios do SPEC
44
+ ```
45
+
46
+ Para uma tarefa pequena (S/M), use o modo rápido:
47
+
48
+ ```
49
+ /oxe-quick → spec + plan + execute + verify em uma sessão
50
+ ```
51
+
52
+ ---
53
+
54
+ ## 3. Quando usar runtime-first
55
+
56
+ Se o projeto tem o runtime compilado (`lib/runtime/index.js`), os comandos enterprise ficam disponíveis:
57
+
58
+ ```bash
59
+ # Verificação formal com manifesto de evidências
60
+ npx oxe-cc runtime verify --dir .
61
+
62
+ # Listar gates pendentes
63
+ npx oxe-cc runtime gates list --dir .
64
+
65
+ # Promover run verificada para PR draft
66
+ npx oxe-cc runtime promote --dir . --target pr_draft
67
+
68
+ # Recuperar run pausada ou interrompida
69
+ npx oxe-cc runtime recover --dir . --run-id <id>
70
+ ```
71
+
72
+ Se o runtime não estiver compilado, os comandos OXE continuam funcionando no modo legado — sem perda de UX.
73
+
74
+ ---
75
+
76
+ ## 4. Validação dos 5 minutos
77
+
78
+ Após o primeiro ciclo completo, estas 5 coisas devem estar verdes:
79
+
80
+ | # | O que checar | Como |
81
+ |---|-------------|------|
82
+ | 1 | STATE.md mostra `verify_complete` ou `plan_complete` | `cat .oxe/STATE.md` |
83
+ | 2 | Nenhum `ERROR` em `oxe-cc doctor` | `npx oxe-cc doctor` |
84
+ | 3 | `oxe-cc status` retorna próximo passo claro | `npx oxe-cc status` |
85
+ | 4 | SPEC.md tem critérios de aceite preenchidos | `cat .oxe/SPEC.md` |
86
+ | 5 | VERIFY.md existe (se ciclo completo) | `cat .oxe/VERIFY.md` |
87
+
88
+ Se algum falhar, rode `/oxe` — o router vai diagnosticar e sugerir a ação correta.
89
+
90
+ ---
91
+
92
+ ## 5. Próximos passos
93
+
94
+ - **Para times** → [`docs/TEAM-ADOPTION.md`](docs/TEAM-ADOPTION.md)
95
+ - **Por papel (executor/reviewer/operador)** → [`docs/ROLES.md`](docs/ROLES.md)
96
+ - **Exemplo completo reproduzível** → [`docs/WALKTHROUGH.md`](docs/WALKTHROUGH.md)
97
+ - **Incidentes e gates** → [`docs/INCIDENT-PLAYBOOK.md`](docs/INCIDENT-PLAYBOOK.md)
98
+ - **Suporte por runtime** → [`docs/RUNTIME-SMOKE-MATRIX.md`](docs/RUNTIME-SMOKE-MATRIX.md)
99
+ - **Referência completa** → [`README.md`](README.md)
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![npm](https://img.shields.io/npm/v/oxe-cc.svg?style=flat-square)](https://www.npmjs.com/package/oxe-cc)
8
8
  [![license](https://img.shields.io/npm/l/oxe-cc.svg?style=flat-square)](LICENSE)
9
9
 
10
- **Versão:** `1.4.1` · [package.json](package.json)
10
+ **Versão:** `1.5.0` · [package.json](package.json)
11
11
 
12
12
  **Framework OXE — Orchestrated eXperience Engineering**
13
13
 
@@ -94,9 +94,10 @@ Contrato estável desta release:
94
94
  | Primeiros 15 minutos | [QUICKSTART.md](QUICKSTART.md) |
95
95
  | Guia por papel (executor / reviewer / operador) | [docs/ROLES.md](docs/ROLES.md) |
96
96
  | Fluxo recomendado para times | [docs/TEAM-ADOPTION.md](docs/TEAM-ADOPTION.md) |
97
- | Exemplo completo reproduzível | [docs/WALKTHROUGH.md](docs/WALKTHROUGH.md) |
98
- | Incidentes e gates | [docs/INCIDENT-PLAYBOOK.md](docs/INCIDENT-PLAYBOOK.md) |
99
- | Suporte por runtime (Cursor, Copilot, Claude Code…) | [docs/RUNTIME-SMOKE-MATRIX.md](docs/RUNTIME-SMOKE-MATRIX.md) |
97
+ | Exemplo completo reproduzível | [docs/WALKTHROUGH.md](docs/WALKTHROUGH.md) |
98
+ | Incidentes e gates | [docs/INCIDENT-PLAYBOOK.md](docs/INCIDENT-PLAYBOOK.md) |
99
+ | Suporte por runtime (Cursor, Copilot, Claude Code…) | [docs/RUNTIME-SMOKE-MATRIX.md](docs/RUNTIME-SMOKE-MATRIX.md) |
100
+ | Release readiness e publicação | [docs/RELEASE-READINESS.md](docs/RELEASE-READINESS.md) |
100
101
 
101
102
  ---
102
103
 
@@ -458,11 +459,18 @@ O `status --full` mostra em ANSI: readiness do ciclo, autoavaliação do plano,
458
459
 
459
460
  O pacote está pronto para uma publicação robusta quando estes sinais estiverem verdes no repositório da release:
460
461
 
461
- - `npm test`
462
- - `npm run scan:assets`
463
- - `npm run build:vscode-ext`
464
- - `node bin/oxe-cc.js doctor`
465
- - `node bin/oxe-cc.js status --full`
462
+ - `npm test`
463
+ - `npm run scan:assets`
464
+ - `npm run build:vscode-ext`
465
+ - `node bin/oxe-cc.js doctor --release --write-manifest`
466
+ - `node bin/oxe-cc.js status --full`
467
+
468
+ Artefatos obrigatórios desta fase:
469
+
470
+ - `.oxe/release/release-manifest.json`
471
+ - `.oxe/release/runtime-smoke-report.json`
472
+ - `.oxe/release/recovery-fixture-report.json`
473
+ - `.oxe/release/multi-agent-soak-report.json`
466
474
 
467
475
  Não há outro bloqueador funcional do plano runtime core para esta publicação. O que sobra depois dela é evolução de ergonomia e expansão de targets, não correção estrutural do contrato atual.
468
476
 
@@ -559,7 +567,8 @@ node bin/oxe-cc.js --help
559
567
  | Comando | O que faz |
560
568
  |---------|-----------|
561
569
  | `oxe-cc` / `oxe-cc install` | Instala workflows e integrações |
562
- | `oxe-cc doctor` | Diagnóstico completo: Node, workflows, config, bootstrap `.oxe/`, sessão ativa, autoavaliação do plano, saúde lógica (`healthy` \| `warning` \| `broken`), drift semântico multi-runtime e workflows sem contrato no registry |
570
+ | `oxe-cc doctor` | Diagnóstico completo: Node, workflows, config, bootstrap `.oxe/`, sessão ativa, autoavaliação do plano, saúde lógica (`healthy` \| `warning` \| `broken`), drift semântico multi-runtime e workflows sem contrato no registry |
571
+ | `oxe-cc doctor --release --write-manifest` | Gate de publicação: valida versões, topo do `CHANGELOG`, runtime compilado, wrapper sync e relatórios obrigatórios; persiste `release-manifest.json` |
563
572
  | `oxe-cc status` | Próximo passo sugerido + saúde lógica do fluxo |
564
573
  | `oxe-cc status --full` | Coverage matrix + readiness gate + active run no terminal (ANSI) |
565
574
  | `oxe-cc status --json` | Mesmo, em JSON (schema v5), com `healthStatus`, `activeSession`, `planSelfEvaluation`, `contextPacks`, `contextQuality`, `semanticsDrift`, `verificationSummary`, `residualRiskSummary`, `evidenceCoverage`, `pendingGates`, `policyDecisionSummary`, `quotaSummary`, `auditSummary`, `promotionSummary`, `runtimeMode`, `fallbackMode`, `gateQueue`, `policyCoverage`, `promotionReadiness`, `recoveryState`, `multiAgent` e `providerCatalog` |
@@ -36,6 +36,16 @@ function resolveInstallOptionsFromConfig(projectRoot, optsIn) {
36
36
  opts.explicitScope = true;
37
37
  }
38
38
 
39
+ if (!opts.explicitIdeScope && !opts.oxeOnly && typeof inst.ide_scope === 'string') {
40
+ if (inst.ide_scope === 'local') {
41
+ opts.ideLocal = true;
42
+ opts.explicitIdeScope = true;
43
+ } else if (inst.ide_scope === 'global') {
44
+ opts.ideLocal = false;
45
+ opts.explicitIdeScope = true;
46
+ }
47
+ }
48
+
39
49
  if (!opts.oxeOnly && inst.vscode === true) {
40
50
  opts.vscode = true;
41
51
  }
@@ -637,11 +637,11 @@ async function resolveRuntimeGate(projectRoot, activeSession, options = {}) {
637
637
  };
638
638
  }
639
639
 
640
- function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
641
- const runtime = loadRuntimeModule();
642
- const current = readRunState(projectRoot, activeSession);
643
- const runId = options.runId || (current && current.run_id) || null;
644
- if (!runId) {
640
+ function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
641
+ const runtime = loadRuntimeModule();
642
+ const current = readRunState(projectRoot, activeSession);
643
+ const runId = options.runId || (current && current.run_id) || null;
644
+ if (!runId) {
645
645
  return {
646
646
  path: null,
647
647
  enabled: false,
@@ -649,34 +649,40 @@ function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
649
649
  mode: null,
650
650
  workspaceIsolationEnforced: false,
651
651
  agents: [],
652
- ownership: [],
653
- orphanReassignments: [],
654
- handoffs: [],
655
- arbitrationResults: [],
656
- };
657
- }
658
- const runDir = path.join(projectRoot, '.oxe', 'runs', runId);
659
- const statePath = path.join(runDir, 'multi-agent-state.json');
660
- const handoffsPath = path.join(runDir, 'handoffs.json');
661
- const arbitrationPath = path.join(runDir, 'arbitration-results.json');
662
- const state = runtime && typeof runtime.loadMultiAgentState === 'function'
663
- ? runtime.loadMultiAgentState(projectRoot, runId)
664
- : readJsonIfExists(statePath);
665
- const handoffs = readJsonIfExists(handoffsPath);
666
- const arbitrationResults = readJsonIfExists(arbitrationPath);
667
- return {
668
- path: statePath,
669
- enabled: Boolean(state),
652
+ ownership: [],
653
+ orphanReassignments: [],
654
+ handoffs: [],
655
+ arbitrationResults: [],
656
+ summary: null,
657
+ };
658
+ }
659
+ const runDir = path.join(projectRoot, '.oxe', 'runs', runId);
660
+ const statePath = path.join(runDir, 'multi-agent-state.json');
661
+ const summaryPath = path.join(runDir, 'multi-agent-summary.json');
662
+ const handoffsPath = path.join(runDir, 'handoffs.json');
663
+ const arbitrationPath = path.join(runDir, 'arbitration-results.json');
664
+ const state = runtime && typeof runtime.loadMultiAgentState === 'function'
665
+ ? runtime.loadMultiAgentState(projectRoot, runId)
666
+ : readJsonIfExists(statePath);
667
+ const summary = runtime && typeof runtime.loadMultiAgentSummary === 'function'
668
+ ? runtime.loadMultiAgentSummary(projectRoot, runId)
669
+ : readJsonIfExists(summaryPath);
670
+ const handoffs = readJsonIfExists(handoffsPath);
671
+ const arbitrationResults = readJsonIfExists(arbitrationPath);
672
+ return {
673
+ path: statePath,
674
+ enabled: Boolean(state),
670
675
  runId,
671
676
  mode: state && state.mode ? state.mode : null,
672
677
  workspaceIsolationEnforced: Boolean(state && state.workspace_isolation_enforced),
673
678
  agents: state && Array.isArray(state.agent_results) ? state.agent_results : [],
674
679
  ownership: state && Array.isArray(state.ownership) ? state.ownership : [],
675
- orphanReassignments: state && Array.isArray(state.orphan_reassignments) ? state.orphan_reassignments : [],
676
- handoffs: Array.isArray(handoffs) ? handoffs : [],
677
- arbitrationResults: Array.isArray(arbitrationResults) ? arbitrationResults : [],
678
- };
679
- }
680
+ orphanReassignments: state && Array.isArray(state.orphan_reassignments) ? state.orphan_reassignments : [],
681
+ handoffs: Array.isArray(handoffs) ? handoffs : [],
682
+ arbitrationResults: Array.isArray(arbitrationResults) ? arbitrationResults : [],
683
+ summary: summary || null,
684
+ };
685
+ }
680
686
 
681
687
  function loadRuntimeVerificationArtifacts(projectRoot, runState) {
682
688
  const runtime = loadRuntimeModule();
@@ -24,6 +24,7 @@ const ALLOWED_CONFIG_KEYS = [
24
24
  'verification_depth',
25
25
  'plan_confidence_threshold',
26
26
  'security_in_verify',
27
+ 'adversarial_verify',
27
28
  'install',
28
29
  'plugins',
29
30
  'workstreams',
@@ -52,7 +53,7 @@ const INSTALL_PROFILES = ['recommended', 'cursor', 'copilot', 'core', 'cli', 'al
52
53
  const INSTALL_REPO_LAYOUTS = ['nested', 'classic'];
53
54
 
54
55
  /** @type {string[]} */
55
- const INSTALL_OBJECT_KEYS = ['profile', 'repo_layout', 'vscode', 'include_commands_dir', 'include_agents_md'];
56
+ const INSTALL_OBJECT_KEYS = ['profile', 'repo_layout', 'ide_scope', 'vscode', 'include_commands_dir', 'include_agents_md'];
56
57
 
57
58
  const EXPECTED_CODEBASE_MAPS = [
58
59
  'OVERVIEW.md',
@@ -152,6 +153,8 @@ function loadOxeConfigMerged(targetProject) {
152
153
  scan_ignore_globs: [],
153
154
  spec_required_sections: [],
154
155
  plan_max_tasks_per_wave: 0,
156
+ lessons_max_age_days: 0,
157
+ install: {},
155
158
  azure: {
156
159
  enabled: false,
157
160
  default_resource_group: '',
@@ -212,15 +215,18 @@ function loadOxeConfigMerged(targetProject) {
212
215
  if (typeof layer.profile === 'string') {
213
216
  Object.assign(merged, expandExecutionProfile(layer.profile));
214
217
  }
218
+ const layerFlat = { ...layer };
215
219
  // Azure: merge aninhado para não sobrescrever campos não especificados
216
220
  if (layer.azure && typeof layer.azure === 'object' && !Array.isArray(layer.azure)) {
217
221
  merged.azure = { .../** @type {any} */ (merged.azure), ...layer.azure };
218
- const layerWithoutAzure = { ...layer };
219
- delete layerWithoutAzure.azure;
220
- Object.assign(merged, layerWithoutAzure);
221
- } else {
222
- Object.assign(merged, layer);
222
+ delete layerFlat.azure;
223
+ }
224
+ // Install: merge aninhado para não sobrescrever campos não especificados
225
+ if (layer.install && typeof layer.install === 'object' && !Array.isArray(layer.install)) {
226
+ merged.install = { .../** @type {any} */ (merged.install || {}), ...layer.install };
227
+ delete layerFlat.install;
223
228
  }
229
+ Object.assign(merged, layerFlat);
224
230
  }
225
231
 
226
232
  const primaryPath = sources.project || sources.user || sources.system || null;
@@ -262,6 +268,11 @@ function validateConfigShape(cfg) {
262
268
  );
263
269
  }
264
270
  }
271
+ if (inst.ide_scope != null) {
272
+ if (typeof inst.ide_scope !== 'string' || !['global', 'local'].includes(inst.ide_scope)) {
273
+ typeErrors.push('install.ide_scope deve ser "global" ou "local"');
274
+ }
275
+ }
265
276
  if (inst.vscode != null && typeof inst.vscode !== 'boolean') {
266
277
  typeErrors.push('install.vscode deve ser boolean');
267
278
  }
@@ -314,6 +325,27 @@ function validateConfigShape(cfg) {
314
325
  if (cfg.scale_adaptive != null && typeof cfg.scale_adaptive !== 'boolean') {
315
326
  typeErrors.push('scale_adaptive deve ser boolean');
316
327
  }
328
+ if (cfg.discuss_before_plan != null && typeof cfg.discuss_before_plan !== 'boolean') {
329
+ typeErrors.push('discuss_before_plan deve ser boolean');
330
+ }
331
+ if (cfg.after_verify_suggest_pr != null && typeof cfg.after_verify_suggest_pr !== 'boolean') {
332
+ typeErrors.push('after_verify_suggest_pr deve ser boolean');
333
+ }
334
+ if (cfg.after_verify_draft_commit != null && typeof cfg.after_verify_draft_commit !== 'boolean') {
335
+ typeErrors.push('after_verify_draft_commit deve ser boolean');
336
+ }
337
+ if (cfg.security_in_verify != null && typeof cfg.security_in_verify !== 'boolean') {
338
+ typeErrors.push('security_in_verify deve ser boolean');
339
+ }
340
+ if (cfg.adversarial_verify != null && typeof cfg.adversarial_verify !== 'boolean') {
341
+ typeErrors.push('adversarial_verify deve ser boolean');
342
+ }
343
+ if (cfg.lessons_max_age_days != null && typeof cfg.lessons_max_age_days !== 'number') {
344
+ typeErrors.push('lessons_max_age_days deve ser número (use 0 para desligar)');
345
+ }
346
+ if (cfg.default_verify_command != null && typeof cfg.default_verify_command !== 'string') {
347
+ typeErrors.push('default_verify_command deve ser string');
348
+ }
317
349
  if (cfg.azure != null) {
318
350
  if (typeof cfg.azure !== 'object' || Array.isArray(cfg.azure)) {
319
351
  typeErrors.push('azure deve ser um objeto');