oxe-cc 0.9.2 → 0.9.3

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.
@@ -9,7 +9,7 @@ oxe_tool_profile: review_heavy
9
9
  oxe_confidence_policy: explicit
10
10
  oxe_context_tier: standard
11
11
  oxe_contract_version: 2.0.0
12
- oxe_semantics_hash: 5afa357495cad615
12
+ oxe_semantics_hash: 8f2925a220ed9bc2
13
13
  ---
14
14
 
15
15
  OXE — Retrospectiva de ciclo: 3–5 lições prescritivas em .oxe/LESSONS.md para ciclos futuros
@@ -25,7 +25,7 @@ OXE — Retrospectiva de ciclo: 3–5 lições prescritivas em .oxe/LESSONS.md p
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `5afa357495cad615`
28
+ - **Checksum semântico:** `8f2925a220ed9bc2`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/retro.md` e `.oxe/context/packs/retro.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow retro --json`
@@ -9,7 +9,7 @@ oxe_tool_profile: read_heavy
9
9
  oxe_confidence_policy: explicit
10
10
  oxe_context_tier: standard
11
11
  oxe_contract_version: 2.0.0
12
- oxe_semantics_hash: 482d3eb12fe261ed
12
+ oxe_semantics_hash: 598fcdce72e894c8
13
13
  ---
14
14
 
15
15
  OXE — Spec em 5 fases: perguntas → pesquisa → requisitos (R-ID v1/v2/fora) → roteiro (.oxe/ROADMAP.md) → aprovação → plan
@@ -25,7 +25,7 @@ OXE — Spec em 5 fases: perguntas → pesquisa → requisitos (R-ID v1/v2/fora)
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `482d3eb12fe261ed`
28
+ - **Checksum semântico:** `598fcdce72e894c8`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/spec.md` e `.oxe/context/packs/spec.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow spec --json`
@@ -11,7 +11,7 @@ oxe_tool_profile: review_heavy
11
11
  oxe_confidence_policy: explicit
12
12
  oxe_context_tier: standard
13
13
  oxe_contract_version: 2.0.0
14
- oxe_semantics_hash: 5afa357495cad615
14
+ oxe_semantics_hash: 8f2925a220ed9bc2
15
15
  ---
16
16
 
17
17
  <!-- oxe-reasoning-contract:start -->
@@ -25,7 +25,7 @@ oxe_semantics_hash: 5afa357495cad615
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `5afa357495cad615`
28
+ - **Checksum semântico:** `8f2925a220ed9bc2`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/retro.md` e `.oxe/context/packs/retro.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow retro --json`
@@ -11,7 +11,7 @@ oxe_tool_profile: read_heavy
11
11
  oxe_confidence_policy: explicit
12
12
  oxe_context_tier: standard
13
13
  oxe_contract_version: 2.0.0
14
- oxe_semantics_hash: 482d3eb12fe261ed
14
+ oxe_semantics_hash: 598fcdce72e894c8
15
15
  ---
16
16
 
17
17
  <!-- oxe-reasoning-contract:start -->
@@ -25,7 +25,7 @@ oxe_semantics_hash: 482d3eb12fe261ed
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `482d3eb12fe261ed`
28
+ - **Checksum semântico:** `598fcdce72e894c8`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/spec.md` e `.oxe/context/packs/spec.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow spec --json`
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:** `0.9.2` · [package.json](package.json)
10
+ **Versão:** `0.9.3` · [package.json](package.json)
11
11
 
12
12
  **Framework OXE — Orchestrated eXperience Engineering**
13
13
 
package/bin/banner.txt CHANGED
@@ -15,4 +15,4 @@
15
15
 
16
16
  ══════════════════════════════════════════════════════
17
17
 
18
- v0.9.2
18
+ v0.9.3
@@ -256,6 +256,7 @@ function resolveArtifactCandidates(projectRoot, activeSession) {
256
256
  phase_summary: withFallback('phase_summary', 'summary', ctx.phaseSummaryJson, null, 'project'),
257
257
  context_pack_dashboard: withFallback('context_pack_dashboard', 'context_pack', ctx.defaultPackJson('dashboard'), null, 'project'),
258
258
  calibration: withFallback('calibration', 'calibration', path.join(base.oxe, 'calibration.json'), null, 'project'),
259
+ lessons_metrics: withFallback('lessons_metrics', 'metrics', path.join(base.oxe, 'lessons-metrics.json'), null, 'project'),
259
260
  };
260
261
  }
261
262
 
@@ -17,7 +17,7 @@ oxe_tool_profile: review_heavy
17
17
  oxe_confidence_policy: explicit
18
18
  oxe_context_tier: standard
19
19
  oxe_contract_version: 2.0.0
20
- oxe_semantics_hash: 5afa357495cad615
20
+ oxe_semantics_hash: 8f2925a220ed9bc2
21
21
  ---
22
22
 
23
23
  <!-- oxe-reasoning-contract:start -->
@@ -31,7 +31,7 @@ oxe_semantics_hash: 5afa357495cad615
31
31
  - **Política de confiança:** explícita
32
32
  - **Tier de contexto padrão:** padrão
33
33
  - **Versão do contrato:** 2.0.0
34
- - **Checksum semântico:** `5afa357495cad615`
34
+ - **Checksum semântico:** `8f2925a220ed9bc2`
35
35
  - **Entrada de contexto prioritária:** `.oxe/context/packs/retro.md` e `.oxe/context/packs/retro.json`
36
36
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
37
37
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow retro --json`
@@ -15,7 +15,7 @@ oxe_tool_profile: read_heavy
15
15
  oxe_confidence_policy: explicit
16
16
  oxe_context_tier: standard
17
17
  oxe_contract_version: 2.0.0
18
- oxe_semantics_hash: 482d3eb12fe261ed
18
+ oxe_semantics_hash: 598fcdce72e894c8
19
19
  ---
20
20
 
21
21
  <!-- oxe-reasoning-contract:start -->
@@ -29,7 +29,7 @@ oxe_semantics_hash: 482d3eb12fe261ed
29
29
  - **Política de confiança:** explícita
30
30
  - **Tier de contexto padrão:** padrão
31
31
  - **Versão do contrato:** 2.0.0
32
- - **Checksum semântico:** `482d3eb12fe261ed`
32
+ - **Checksum semântico:** `598fcdce72e894c8`
33
33
  - **Entrada de contexto prioritária:** `.oxe/context/packs/spec.md` e `.oxe/context/packs/spec.json`
34
34
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
35
35
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow spec --json`
@@ -0,0 +1,13 @@
1
+ {
2
+ "schema_version": "1.0.0",
3
+ "updated": "{{date}}",
4
+ "lessons": [],
5
+ "quality_contracts": [],
6
+ "summary": {
7
+ "total_lessons": 0,
8
+ "active": 0,
9
+ "deprecated": 0,
10
+ "high_impact": 0,
11
+ "avg_success_rate": null
12
+ }
13
+ }
@@ -0,0 +1,295 @@
1
+ # OXE — Quality Contract Elevation (Spec Fase 3.5)
2
+
3
+ <objective>
4
+ Transformar a Fase 3.5 de uma lista de checklist em um **Contrato de Qualidade** formal: um conjunto de compromissos mensuráveis que o projeto assume antes de qualquer linha de código. Cada item recusado torna-se um risco documentado com severidade e responsável — não silenciosamente ignorado.
5
+
6
+ Cobre 6 dimensões: Segurança, Resiliência, Observabilidade, Confiança de Dados, Acessibilidade e Prontidão Operacional.
7
+ </objective>
8
+
9
+ ---
10
+
11
+ ## Conceito fundamental
12
+
13
+ Um checklist pergunta: *"você fez X?"*
14
+ Um contrato de qualidade pergunta: *"a que piso de qualidade este sistema se compromete antes de ser construído?"*
15
+
16
+ A diferença prática:
17
+ - Itens aprovados → viram **R-RB-NN** na spec → **Tn** no plan → verificados no verify
18
+ - Itens recusados → entram no **Accepted Risk Registry** com severidade, justificativa e responsável
19
+ - Nenhum risco some silenciosamente
20
+
21
+ ---
22
+
23
+ ## Parte I — Detector de Arquitetura (executa sempre, antes de qualquer checklist)
24
+
25
+ Oito cheiros detectáveis a partir da spec e stack descritos. Cada um detectado gera uma observação estruturada — não um bloqueio, mas um sinalizador que alimenta os checklists das Partes seguintes.
26
+
27
+ | Smell | Sinal de detecção na spec | Risco gerado |
28
+ |-------|--------------------------|--------------|
29
+ | **AS-1 God Module** | Um único módulo/serviço cobre domínios não relacionados (ex.: auth + billing + notificações) | Acoplamento oculto; mudança em um domínio quebra outro |
30
+ | **AS-2 Máquina de Estado Implícita** | Requisitos descrevem estados (rascunho, publicado, arquivado) sem tabela de transições explícita | Transições ilegais possíveis; comportamento indefinido em edge cases |
31
+ | **AS-3 Sem Escape Assíncrono** | Todas as operações descritas como síncronas; nenhuma menção a filas, eventos ou jobs para operações longas | Timeouts em cascata; usuário travado aguardando operações de longa duração |
32
+ | **AS-4 Serviço Escuro** | Nenhum requisito menciona logs, métricas ou rastreamento | Impossível diagnosticar falhas em produção; debugging cego |
33
+ | **AS-5 Coleta Ilimitada** | Dados são coletados mas sem política de retenção, arquivamento ou deleção | Crescimento de banco ilimitado; risco LGPD/GDPR por dados retidos além do necessário |
34
+ | **AS-6 Ponto Único de Falha Crítico** | Caminho crítico (auth, pagamento, core business) sem fallback, retry ou degradação definida | Falha de um componente derruba toda a operação |
35
+ | **AS-7 API Sem Versão** | API pública descrita sem estratégia de versionamento ou deprecação | Mudanças futuras quebram clientes sem aviso; impossível evoluir contrato |
36
+ | **AS-8 Deploy Acoplado** | Dois ou mais serviços/módulos distintos sempre fazem deploy juntos | Perda de autonomia; velocidade limitada pelo componente mais lento |
37
+
38
+ **Ação:** para cada smell detectado, mencionar ao usuário antes dos checklists: *"Identifiquei AS-N [nome]: [sinal encontrado]. Vamos abordar isso nos requisitos ou prefere registrar como risco?"*
39
+
40
+ ---
41
+
42
+ ## Parte II — Derivação de Ameaças (STRIDE)
43
+
44
+ Em vez de propor mitigações genéricas, derivar as **ameaças concretas** da arquitetura descrita e mapear mitigações ao vetor específico. O usuário vê *por que* cada controle existe, não apenas *o que* fazer.
45
+
46
+ **Domínios → Vetores STRIDE:**
47
+
48
+ | Domínio | Ameaça | Categoria STRIDE | Mitigações relacionadas |
49
+ |---------|--------|-----------------|------------------------|
50
+ | AUTH | Impostura de credenciais (brute force, credential stuffing) | **S**poofing | RB-SEC-A1, RB-SEC-A2, RB-SEC-A3 |
51
+ | AUTH | Sequestro de sessão (token roubado via XSS ou rede) | **S**poofing + **I**nformation Disclosure | RB-SEC-A4, RB-SEC-A7 |
52
+ | AUTH | Escalada de privilégio (acesso a recursos de outro usuário) | **E**levation of Privilege | RB-SEC-A4, RB-SEC-A7 |
53
+ | AUTH | Ausência de trilha de auditoria (negação de ações realizadas) | **R**epudiation | RB-OBS-L3 |
54
+ | API | Falsificação de requisição (CSRF, replay attacks) | **T**ampering | RB-SEC-H2, RB-SEC-A7 |
55
+ | API | Esgotamento de recursos (flood de requisições) | **D**enial of Service | RB-SEC-H3, RB-SEC-A2 |
56
+ | API | Vazamento de informação (stack traces, mensagens internas) | **I**nformation Disclosure | RB-SEC-H4, RB-OBS-L1 |
57
+ | DB | Injeção de dados (SQL/NoSQL injection) | **T**ampering | RB-SEC-D1 |
58
+ | DB | Exposição de dados sensíveis em repouso | **I**nformation Disclosure | RB-TRUST-T3 |
59
+ | DB | Ausência de auditoria de acesso a dados PII | **R**epudiation | RB-TRUST-T4 |
60
+ | FRONTEND | Injeção de script (XSS) | **T**ampering + **S**poofing | RB-SEC-F2 |
61
+ | FRONTEND | Token exposto em armazenamento acessível por script | **I**nformation Disclosure | RB-SEC-F1 |
62
+ | FILE | Execução de arquivo malicioso (malware upload) | **E**levation of Privilege | RB-SEC-FI1, RB-SEC-FI3 |
63
+ | FILE | Esgotamento de disco (upload bombs) | **D**enial of Service | RB-SEC-FI2 |
64
+
65
+ **Uso:** ao propor RB-SEC-NN ao usuário, referenciar a ameaça: *"RB-SEC-A2 (rate limiting) mitiga S1 — impostura de credencial por brute force identificada na sua arquitetura de login."*
66
+
67
+ ---
68
+
69
+ ## Parte III — 6 Dimensões de Qualidade
70
+
71
+ ### Sistema de Tiers
72
+
73
+ | Tier | Nome | Significado | Risco se recusado |
74
+ |------|------|-------------|-------------------|
75
+ | 🔴 **Piso** | Floor | Ausente = falha ativa conhecida. Recusar = P0 no Accepted Risk Registry | P0 — bloqueia verify se `security_in_verify: true` |
76
+ | 🟡 **Base** | Foundation | Ausente = risco operacional significativo. Recusar = P1 documentado | P1 — consta no SECURITY.md / CONCERNS.md |
77
+ | 🟢 **Excelência** | Excellence | Diferencia sistemas bons de ótimos. Recusar = P2 ou mover para v2 sem fricção | P2 — registrado, não bloqueia |
78
+
79
+ ---
80
+
81
+ ### DIM-SEC — Segurança
82
+
83
+ | ID | Critério | Ameaça mitigada | Tier |
84
+ |----|----------|----------------|------|
85
+ | RB-SEC-A1 | Senhas hashed com bcrypt ou argon2 (salt rounds ≥ 10) | S1 Credential Spoofing | 🔴 Piso |
86
+ | RB-SEC-A2 | Rate limiting no login (≤ 10 tentativas / 15min / IP) | S1 Brute Force, D1 Flood | 🔴 Piso |
87
+ | RB-SEC-A3 | Comparação timing-safe em credenciais e tokens | S1 Timing Attack | 🔴 Piso |
88
+ | RB-SEC-A4 | Tokens de acesso em httpOnly cookie (nunca localStorage) | S2 Session Hijacking | 🔴 Piso |
89
+ | RB-SEC-A7 | CSRF protection (double-submit ou SameSite=Strict) | T1 Request Forgery | 🔴 Piso |
90
+ | RB-SEC-H1 | Security headers via Helmet ou equivalente | I1 Information Disclosure | 🔴 Piso |
91
+ | RB-SEC-H2 | CORS restrito a origens explícitas (sem `*` em produção) | T1 Request Forgery | 🔴 Piso |
92
+ | RB-SEC-H4 | Validação de schema em todas as entradas (Zod, Joi, etc.) | T1 Tampering, I1 Disclosure | 🔴 Piso |
93
+ | RB-SEC-D1 | Queries parametrizadas — sem interpolação de input | T2 Injection | 🔴 Piso |
94
+ | RB-SEC-F2 | Sanitização antes de `innerHTML` / `dangerouslySetInnerHTML` | T1 XSS | 🔴 Piso |
95
+ | RB-SEC-FI1 | Validação de MIME no servidor para uploads | EP1 Malware | 🔴 Piso |
96
+ | RB-SEC-H3 | Body size limit configurado | D1 Resource Exhaustion | 🟡 Base |
97
+ | RB-SEC-A5 | Refresh token com rotação + revogação persistida | S2 Session Hijacking | 🟡 Base |
98
+ | RB-SEC-FI3 | Nomes de arquivo sanitizados (sem path traversal) | EP1 Traversal | 🟡 Base |
99
+ | RB-SEC-D3 | Erros sem expor stack trace ou mensagens internas | I1 Information Disclosure | 🟡 Base |
100
+ | RB-SEC-FI2 | Limite de tamanho de arquivo configurável | D1 Disk Exhaustion | 🟡 Base |
101
+ | RB-SEC-A6 | Expiração de sessão configurável via env | EP1 Stale Session | 🟢 Excelência |
102
+ | RB-SEC-F3 | Links externos com `rel="noopener noreferrer"` | EP1 Tab Hijacking | 🟢 Excelência |
103
+
104
+ *Critérios Piso que não se aplicam em MVPs demo sem usuários reais: RB-SEC-A1, RB-SEC-A5 — marcar `fora` com justificativa explícita.*
105
+
106
+ ---
107
+
108
+ ### DIM-RES — Resiliência
109
+
110
+ Aplicar quando: qualquer dependência externa (API terceira, DB, serviço interno, fila).
111
+
112
+ | ID | Critério | Padrão de resiliência | Tier |
113
+ |----|----------|-----------------------|------|
114
+ | RB-RES-1 | Timeout explícito em todas as chamadas externas (DB, HTTP, filas) | Timeout | 🔴 Piso |
115
+ | RB-RES-2 | Comportamento definido quando dependência externa falha (fallback, erro amigável, degradação parcial) | Graceful Degradation | 🔴 Piso |
116
+ | RB-RES-3 | Retry com backoff exponencial + jitter em operações transitórias | Retry | 🟡 Base |
117
+ | RB-RES-4 | Circuit breaker em chamadas a serviços críticos (abre após N falhas consecutivas) | Circuit Breaker | 🟡 Base |
118
+ | RB-RES-5 | Operações longas (> 2s) executadas de forma assíncrona (fila, job, evento) | Async Escape Valve | 🟡 Base |
119
+ | RB-RES-6 | Idempotência garantida em operações críticas (pagamento, envio de email, criação de recurso) | Idempotency | 🟡 Base |
120
+ | RB-RES-7 | Bulkhead: pool de recursos isolado por tipo de operação (leitura vs escrita, rápido vs lento) | Bulkhead | 🟢 Excelência |
121
+ | RB-RES-8 | SLO definido: disponibilidade alvo (ex.: 99.9%) e latência p99 (ex.: < 500ms) | SLO | 🟢 Excelência |
122
+
123
+ ---
124
+
125
+ ### DIM-OBS — Observabilidade
126
+
127
+ Aplicar quando: qualquer serviço com endpoints HTTP, jobs, ou processamento de dados.
128
+
129
+ | ID | Critério | Pilar | Tier |
130
+ |----|----------|-------|------|
131
+ | RB-OBS-H1 | Endpoint `/health` ou `/api/health` retorna status 200 quando saudável | Health | 🔴 Piso |
132
+ | RB-OBS-L1 | Logs estruturados (JSON) com nível, timestamp, request_id e contexto de negócio | Logs | 🔴 Piso |
133
+ | RB-OBS-L2 | Erros críticos logados com stack trace + contexto suficiente para reproduzir | Logs | 🔴 Piso |
134
+ | RB-OBS-L3 | Ações sensíveis logadas com user_id e timestamp (login, logout, mudança de permissão, deleção) | Logs + Audit | 🟡 Base |
135
+ | RB-OBS-M1 | Métricas básicas expostas: latência de endpoint, taxa de erro, throughput | Metrics | 🟡 Base |
136
+ | RB-OBS-M2 | Alerta definido para degradação acima do threshold (ex.: error rate > 1% por 5min) | Alerting | 🟡 Base |
137
+ | RB-OBS-T1 | Request ID propagado em todos os serviços/chamadas de uma requisição | Traces | 🟢 Excelência |
138
+ | RB-OBS-T2 | Tracing distribuído (OpenTelemetry ou equivalente) para caminhos críticos | Traces | 🟢 Excelência |
139
+ | RB-OBS-D1 | Dashboard de golden signals: latência, tráfego, erros, saturação | Dashboard | 🟢 Excelência |
140
+
141
+ ---
142
+
143
+ ### DIM-TRUST — Confiança de Dados (LGPD / GDPR)
144
+
145
+ Aplicar quando: qualquer dado pessoal coletado (nome, email, CPF, IP, localização, comportamento).
146
+
147
+ | ID | Critério | Princípio legal | Tier |
148
+ |----|----------|----------------|------|
149
+ | RB-TRUST-T1 | Tabela de dados pessoais: campo, finalidade, base legal, quem acessa, tempo de retenção | Minimização + Finalidade | 🔴 Piso |
150
+ | RB-TRUST-T2 | Somente campos estritamente necessários à finalidade declarada são coletados | Minimização | 🔴 Piso |
151
+ | RB-TRUST-T3 | Dados sensíveis criptografados em repouso (campo ou disco) | Segurança | 🔴 Piso |
152
+ | RB-TRUST-T4 | Acesso a dados PII logado com user_id e timestamp (auditoria de acesso) | Responsabilização | 🟡 Base |
153
+ | RB-TRUST-T5 | Política de retenção automatizada: dados deletados ou anonimizados após N dias | Limitação de Retenção | 🟡 Base |
154
+ | RB-TRUST-T6 | Capacidade de exportar todos os dados de um usuário (portabilidade LGPD Art. 18) | Portabilidade | 🟡 Base |
155
+ | RB-TRUST-T7 | Capacidade de deletar completamente um usuário e seus dados (direito ao esquecimento) | Eliminação | 🟡 Base |
156
+ | RB-TRUST-T8 | Pseudonimização de PII em ambientes de desenvolvimento/staging | Segurança | 🟢 Excelência |
157
+ | RB-TRUST-T9 | Consentimento explícito registrado com timestamp e versão da política | Consentimento | 🟢 Excelência |
158
+
159
+ *Se o sistema processa dados pessoais, RB-TRUST-T1 e RB-TRUST-T2 são Piso independente de outros domínios.*
160
+
161
+ ---
162
+
163
+ ### DIM-ACCESS — Acessibilidade e UX de Erro
164
+
165
+ Aplicar quando: qualquer interface visível ao usuário final.
166
+
167
+ | ID | Critério | Padrão | Tier |
168
+ |----|----------|--------|------|
169
+ | RB-ACC-W1 | Contraste mínimo 4.5:1 para texto normal, 3:1 para texto grande (WCAG 2.1 AA) | WCAG 2.1 AA | 🔴 Piso |
170
+ | RB-ACC-W2 | Navegação completa por teclado (Tab, Enter, Esc em todos os fluxos críticos) | WCAG 2.1 AA | 🔴 Piso |
171
+ | RB-ACC-E1 | Mensagens de erro em linguagem natural — sem códigos internos, stack traces ou jargão técnico | Error UX | 🔴 Piso |
172
+ | RB-ACC-E2 | Estado de loading explícito em operações assíncronas (spinner, skeleton, texto) | Error UX | 🟡 Base |
173
+ | RB-ACC-E3 | Estado de erro com ação de recuperação sugerida (retry, contato, próximo passo) | Error UX | 🟡 Base |
174
+ | RB-ACC-W3 | Labels e ARIA em todos os campos e botões interativos | WCAG 2.1 AA | 🟡 Base |
175
+ | RB-ACC-W4 | Imagens não decorativas com texto alternativo descritivo | WCAG 2.1 AA | 🟡 Base |
176
+ | RB-ACC-E4 | Página de erro 404/500 com link de volta ao ponto seguro (home, dashboard) | Error UX | 🟡 Base |
177
+ | RB-ACC-W5 | Foco visível em elementos interativos (outline customizado ou padrão visível) | WCAG 2.1 AA | 🟡 Base |
178
+ | RB-ACC-W6 | Skip link para pular navegação repetitiva (acessibilidade para leitores de tela) | WCAG 2.1 AAA | 🟢 Excelência |
179
+
180
+ ---
181
+
182
+ ### DIM-OPS — Prontidão Operacional
183
+
184
+ Aplicar quando: qualquer serviço que vai a produção ou será operado por outra pessoa.
185
+
186
+ | ID | Critério | Categoria | Tier |
187
+ |----|----------|-----------|------|
188
+ | RB-OPS-S1 | Segredos exclusivamente via variáveis de ambiente — nunca hardcoded ou commitados | Secrets | 🔴 Piso |
189
+ | RB-OPS-S2 | `.env.example` documenta todas as variáveis obrigatórias com descrição | Secrets | 🔴 Piso |
190
+ | RB-OPS-D1 | Estratégia de deploy definida: como fazer deploy, rollback e smoke test | Deploy | 🟡 Base |
191
+ | RB-OPS-D2 | Migrations de banco reversíveis (down migration definida para cada up migration) | Deploy | 🟡 Base |
192
+ | RB-OPS-R1 | README com: pré-requisitos, como rodar localmente, como testar, variáveis necessárias | Docs | 🟡 Base |
193
+ | RB-OPS-R2 | Runbook mínimo: o que fazer quando o serviço cai (quem acionar, como diagnosticar) | Runbook | 🟡 Base |
194
+ | RB-OPS-D3 | Zero-downtime deploy ou janela de manutenção documentada para deploys com downtime | Deploy | 🟢 Excelência |
195
+ | RB-OPS-D4 | Feature flag ou kill switch para desativar funcionalidade nova sem redeploy | Deploy | 🟢 Excelência |
196
+ | RB-OPS-R3 | RTO / RPO definidos: quanto tempo de inatividade é aceitável, quanto dado pode ser perdido | Recovery | 🟢 Excelência |
197
+
198
+ ---
199
+
200
+ ## Parte IV — Accepted Risk Registry
201
+
202
+ Todo item recusado pelo usuário **deve** ser registrado no registro de riscos aceitos — nunca silenciado.
203
+
204
+ ### Formato de entrada
205
+
206
+ ```
207
+ | ID | Critério recusado | Tier | Justificativa | Responsável | Data | Revisão |
208
+ |-------|-------------------|------|---------------|-------------|------|---------|
209
+ | AR-01 | RB-SEC-A2 (rate limiting) | Piso | MVP local sem exposição pública; revisitar em v2 | Eduardo | 2026-04-17 | Antes do deploy público |
210
+ ```
211
+
212
+ ### Onde registrar
213
+ - Na seção **"Suposições e riscos"** do `SPEC.md`, como tabela `## Riscos Aceitos`
214
+ - Itens com tier **Piso** recusados → também listados em `CONCERNS.md` com tag `[P0]`
215
+ - Revisados obrigatoriamente na **Fase 5 de aprovação** — usuário confirma ciência de cada P0/P1 aceito
216
+
217
+ ### Regra de severidade no registry
218
+ | Tier do item recusado | Severidade no registry | Impacto no verify |
219
+ |----------------------|----------------------|-------------------|
220
+ | Piso | P0 — risco crítico documentado | Bloqueia `verify_complete` se `security_in_verify: true` |
221
+ | Base | P1 — risco operacional documentado | Aparece em SECURITY.md / CONCERNS.md |
222
+ | Excelência | P2 — débito técnico consciente | Registrado, não bloqueia |
223
+
224
+ ---
225
+
226
+ ## Parte V — Quality Score
227
+
228
+ Calculado ao final da Fase 3.5, antes de gerar o roteiro.
229
+
230
+ ```
231
+ Quality Score = (Piso_aprovados / Piso_total × 60) + (Base_aprovados / Base_total × 40)
232
+ ```
233
+
234
+ | Faixa | Significado | Ação |
235
+ |-------|-------------|------|
236
+ | 90–100 | Contrato de qualidade forte | Avançar; mencionar ao usuário |
237
+ | 70–89 | Contrato sólido com lacunas documentadas | Avançar; destacar P1s aceitos |
238
+ | 50–69 | Lacunas significativas — riscos operacionais relevantes | Avançar com alerta claro no SPEC |
239
+ | < 50 | Qualidade insuficiente para produção | Apresentar ao usuário antes de avançar; sugerir revisão |
240
+
241
+ **Regra de Piso:** se qualquer item Piso for recusado, o Quality Score é automaticamente exibido com `⚠ Piso incompleto` independente da pontuação total.
242
+
243
+ ---
244
+
245
+ ## Processo de elevação (Fase 3.5) — passo a passo
246
+
247
+ ```
248
+ 1. Executar Parte I (Detector de Arquitetura)
249
+ → Listar smells detectados; apresentar ao usuário antes dos checklists
250
+
251
+ 2. Executar Parte II (Derivação STRIDE)
252
+ → Mapear domínios detectados → ameaças concretas
253
+
254
+ 3. Para cada dimensão aplicável (SEC, RES, OBS, TRUST, ACCESS, OPS):
255
+ a. Filtrar itens já cobertos pelos A* da Fase 3
256
+ b. Propor itens restantes agrupados por Tier (Piso → Base → Excelência)
257
+ c. Para cada item Piso: referenciar a ameaça STRIDE ou smell que o motivou
258
+
259
+ 4. Apresentar ao usuário em bloco único:
260
+ - Smells detectados (se houver)
261
+ - Critérios por dimensão e tier (não todos de uma vez — agrupar por dimensão)
262
+ - Para cada item Piso, mencionar: "Este item mitiga [ameaça/smell] e sua ausência é risco P0"
263
+
264
+ 5. Aguardar decisão por dimensão (não item a item — reduz fricção)
265
+
266
+ 6. Incorporar aprovados na tabela da Fase 3 como R-RB-NN
267
+
268
+ 7. Registrar recusados no Accepted Risk Registry (Suposições e riscos do SPEC)
269
+
270
+ 8. Calcular e exibir Quality Score
271
+
272
+ 9. Se Quality Score < 50 ou Piso incompleto: apresentar resumo de riscos e confirmar com usuário antes de avançar
273
+ ```
274
+
275
+ ---
276
+
277
+ ## Detecção de domínios aplicáveis
278
+
279
+ | Domínio | Ativa dimensões | Detectado quando |
280
+ |---------|----------------|-----------------|
281
+ | AUTH | SEC, OBS (audit), TRUST (se há dados pessoais) | Requisitos mencionam: login, logout, senha, sessão, JWT, token, autenticação |
282
+ | API | SEC, RES, OBS | Stack inclui: Express, Fastify, Hono, NestJS, Flask, Django, Spring — ou há rotas HTTP |
283
+ | DB | SEC, TRUST, OPS | Stack inclui: SQL, SQLite, PostgreSQL, MySQL, MongoDB, Prisma, Drizzle, Sequelize |
284
+ | FRONTEND | SEC, ACCESS, OBS | Stack inclui: React, Vue, Angular, Svelte, Next.js — ou há interface web |
285
+ | FILE | SEC, TRUST | Requisitos mencionam: upload, download, armazenamento de arquivos, S3, blob |
286
+ | DADOS PESSOAIS | TRUST (Piso automático) | Requisitos mencionam: email, CPF, nome, endereço, telefone, localização, IP de usuário |
287
+ | PRODUÇÃO | OPS | Requisitos ou contexto indicam deploy para ambiente acessível externamente |
288
+
289
+ ---
290
+
291
+ ## Regra de escopo mínimo
292
+
293
+ Critérios marcados como Piso são **fortemente recomendados** mas o usuário tem autoridade final.
294
+ Se recusar um Piso, registrar no Accepted Risk Registry com motivo — nunca forçar inclusão.
295
+ O Quality Score e o registro de riscos garantem transparência sem impor; a decisão permanece do usuário.
@@ -606,9 +606,12 @@
606
606
  "global_lessons",
607
607
  "project_summary",
608
608
  "session_summary",
609
- "phase_summary"
609
+ "phase_summary",
610
+ "lessons_metrics",
611
+ "spec"
610
612
  ],
611
- "extraction_intent": "verification"
613
+ "extraction_intent": "verification",
614
+ "quality_contract_aware": true
612
615
  },
613
616
  "review-pr": {
614
617
  "reasoning_mode": "review",
@@ -715,9 +718,11 @@
715
718
  "codebase_overview",
716
719
  "codebase_integrations",
717
720
  "global_lessons",
718
- "azure_inventory"
721
+ "azure_inventory",
722
+ "lessons_metrics"
719
723
  ],
720
- "extraction_intent": "planning_input"
724
+ "extraction_intent": "planning_input",
725
+ "quality_contract_aware": true
721
726
  },
722
727
  "ui-review": {
723
728
  "reasoning_mode": "review",
@@ -777,6 +782,29 @@
777
782
  ],
778
783
  "extraction_intent": "verification"
779
784
  },
785
+ "verify-audit": {
786
+ "reasoning_mode": "review",
787
+ "question_policy": "none",
788
+ "output_contract": "findings",
789
+ "tool_profile": "review_heavy",
790
+ "confidence_policy": "explicit",
791
+ "required_artifacts": [
792
+ "state",
793
+ "spec",
794
+ "verify"
795
+ ],
796
+ "optional_artifacts": [
797
+ "session_summary",
798
+ "phase_summary"
799
+ ],
800
+ "extraction_intent": "verification",
801
+ "auditor_excluded": [
802
+ "plan",
803
+ "runtime",
804
+ "active_run",
805
+ "events"
806
+ ]
807
+ },
780
808
  "verify": {
781
809
  "reasoning_mode": "review",
782
810
  "required_artifacts": [
@@ -77,6 +77,26 @@ Ao ler `LESSONS.md`, priorizar entradas com **`Frequência >= 2`** ou **`Impacto
77
77
  - Se existe: chamar `updateLessonMetric` com `{ cycle: "C-NN", verify_status: "<verify_complete|verify_failed>", saved_hours: <estimativa ou 0> }`.
78
78
  - Se não existe: criar nova entrada com `applied_cycles: ["C-NN"]`, `outcomes: [...]`, `success_rate: 1.0` (ou `0.0` se falhou), `status: "active"`, `deprecation_threshold: 0.5`.
79
79
  - Lições com `success_rate < 0.5` e ≥ 3 observações → marcar `status: "deprecated"` e registrar aviso no chat.
80
+ 8a. **Captura do Contrato de Qualidade** (se VERIFY.md contiver seção **Contrato de Qualidade**):
81
+ - Extrair Quality Score comprometido (da SPEC) e Quality Score realizado (do VERIFY).
82
+ - Extrair itens R-RB declined do Accepted Risk Registry da SPEC.
83
+ - Registrar em `lessons-metrics.json` na seção `quality_contracts` (criar arquivo se não existir, usando `oxe/templates/LESSONS-METRICS.template.json`):
84
+ ```json
85
+ {
86
+ "session": "<active_session ou 'default'>",
87
+ "cycle": "C-NN",
88
+ "date": "<YYYY-MM-DD>",
89
+ "quality_score_committed": <QS comprometido ou null>,
90
+ "quality_score_realized": <QS realizado>,
91
+ "floor_complete": <true|false>,
92
+ "approved_items": ["RB-SEC-A1", "..."],
93
+ "declined_items": [{ "id": "RB-X", "tier": "...", "reason": "..." }],
94
+ "gaps_p0": ["RB-SEC-A2"],
95
+ "verify_status": "<verify_complete|verify_failed>"
96
+ }
97
+ ```
98
+ - Se algum item R-RB Piso foi declined na spec E o verify registrou gap relacionado: criar lição com tipo `quality-contract`, Impacto: alto, instrução prescritiva sobre o critério específico.
99
+ - Se Quality Score realizado < comprometido em ≥ 10 pontos: criar lição com tipo `quality-contract` descrevendo o padrão de implementação não seguido.
80
100
  9. Atualizar **`.oxe/STATE.md`**: campo `last_retro: YYYY-MM-DD`.
81
101
  10. Responder no chat: ID do ciclo (C-NN), número de lições registradas, lição mais crítica em 1 frase, lições depreciadas (se houver), sugestão do próximo ciclo (`/oxe-scan` ou `/oxe-spec`).
82
102
  </process>
@@ -89,4 +109,5 @@ Ao ler `LESSONS.md`, priorizar entradas com **`Frequência >= 2`** ou **`Impacto
89
109
  - [ ] Lições com raiz e tipo iguais a entradas anteriores têm `Frequência` incrementada, não duplicadas.
90
110
  - [ ] `STATE.md` tem `last_retro` atualizado.
91
111
  - [ ] Entradas anteriores preservadas; apenas `Status` pode mudar para `resolvido`.
112
+ - [ ] Se VERIFY.md contiver seção Contrato de Qualidade: `lessons-metrics.json` atualizado com entrada na seção `quality_contracts`.
92
113
  </success_criteria>
@@ -13,10 +13,10 @@ 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
- **Contrato de raciocínio:** aplicar `oxe/workflows/references/reasoning-discovery.md`. Antes de perguntar, explorar o que o repo e os artefatos já respondem; separar fatos, inferências e lacunas.
18
-
19
- **Pré-requisito preferível:** scan executado. Se não existir, mencionar na spec que o mapa está pendente.
16
+ <context>
17
+ **Contrato de raciocínio:** aplicar `oxe/workflows/references/reasoning-discovery.md`. Antes de perguntar, explorar o que o repo e os artefatos já respondem; separar fatos, inferências e lacunas.
18
+
19
+ **Pré-requisito preferível:** scan executado. Se não existir, mencionar na spec que o mapa está pendente.
20
20
 
21
21
  **Contrato de robustez:** seguir `oxe/workflows/references/flow-robustness-contract.md`. Antes de escrever, resolver artefatos obrigatórios, validar pré-condições e só então produzir a spec. O output desta fase deve deixar evidência estruturada suficiente para o `plan` decidir se o plano é realmente o melhor disponível.
22
22
 
@@ -34,8 +34,8 @@ Ler no início:
34
34
  - `.oxe/codebase/OVERVIEW.md` e `STACK.md` se existirem — não contradizer o repo
35
35
  - **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
36
36
  - **`.oxe/global/LESSONS.md`** — se existir, ler entradas com `Aplicar em: spec` e status `ativo`. **Priorizar entradas com `Frequência >= 2` ou `Impacto: alto`** — aplicar como restrições explícitas. Entradas com `Frequência: 1` e `Impacto: baixo` são contexto secundário. Usar 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.
37
- - `.oxe/CAPABILITIES.md` e `.oxe/INVESTIGATIONS.md` — usar para sugerir capacidades e pesquisas já existentes antes de abrir novas lacunas
38
- - Se o problema tocar Azure, ler `.oxe/cloud/azure/profile.json`, `auth-status.json` e `INVENTORY.md` antes de fechar requisitos; se o inventário estiver ausente ou stale, exigir discovery via `oxe-cc azure sync` antes de consolidar a spec
37
+ - `.oxe/CAPABILITIES.md` e `.oxe/INVESTIGATIONS.md` — usar para sugerir capacidades e pesquisas já existentes antes de abrir novas lacunas
38
+ - Se o problema tocar Azure, ler `.oxe/cloud/azure/profile.json`, `auth-status.json` e `INVENTORY.md` antes de fechar requisitos; se o inventário estiver ausente ou stale, exigir discovery via `oxe-cc azure sync` antes de consolidar a spec
39
39
 
40
40
  **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.
41
41
 
@@ -88,9 +88,9 @@ Usar templates: **`oxe/templates/SPEC.template.md`** e **`oxe/templates/ROADMAP.
88
88
 
89
89
  **Objetivo:** investigar domínios incertos antes de escrever requisitos.
90
90
 
91
- **Proposta ao usuário:** com base na Fase 1, listar 2-4 áreas de investigação sugeridas e perguntar quais investigar. Exemplos:
92
- - "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?"
93
- - "A trilha depende de Azure e o inventário está incompleto. Quer sincronizar recursos reais antes de congelar os requisitos?"
91
+ **Proposta ao usuário:** com base na Fase 1, listar 2-4 áreas de investigação sugeridas e perguntar quais investigar. Exemplos:
92
+ - "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?"
93
+ - "A trilha depende de Azure e o inventário está incompleto. Quer sincronizar recursos reais antes de congelar os requisitos?"
94
94
 
95
95
  **Se aprovado:**
96
96
  - Criar notas de pesquisa datadas em `research/YYYY-MM-DD-<slug>.md` no escopo ativo (usar fluxo de `research.md`)
@@ -127,6 +127,27 @@ Usar templates: **`oxe/templates/SPEC.template.md`** e **`oxe/templates/ROADMAP.
127
127
  **Apresentar ao usuário para validação** antes de avançar para Fase 4. Se ajustar: atualizar tabela e repetir até aprovação.
128
128
  </fase_3_requisitos>
129
129
 
130
+ <fase_35_elevacao_robustez>
131
+ ## Fase 3.5 — Elevação de Robustez (automática)
132
+
133
+ **Objetivo:** propor proativamente critérios de hardening baseados no stack detectado, antes de criar o roteiro. Garante que segurança e robustez entrem na spec — e portanto no plan, nos testes e no verify — em vez de ficarem como auditoria pós-hoc.
134
+
135
+ **Referência:** `oxe/workflows/references/robustness-elevation.md`
136
+
137
+ **Execução:**
138
+
139
+ 1. **Detectar domínios** presentes: AUTH, API, DB, FRONTEND, FILE — conforme tabela de detecção do arquivo de referência.
140
+ 2. **Para cada domínio detectado**, percorrer o checklist correspondente e filtrar critérios já cobertos por A* existentes.
141
+ 3. **Propor** os critérios restantes como R-RB-NN com prioridade sugerida (v1 / v2 / fora).
142
+ 4. **Apresentar ao usuário** em bloco único — domínios detectados, critérios propostos com justificativa breve para v1 críticos.
143
+ 5. **Aguardar decisão** — usuário confirma, ajusta versão ou descarta cada critério.
144
+ 6. **Incorporar aprovados** na tabela da Fase 3; registrar descartados com justificativa na seção "Suposições e riscos" da SPEC.
145
+
146
+ **Regra:** nunca forçar inclusão. Se o usuário descartar um v1, registrar o motivo explicitamente.
147
+
148
+ **Pulável apenas se:** stack não se encaixa em nenhum domínio detectável (ex.: script CLI puro sem auth, sem HTTP, sem DB).
149
+ </fase_35_elevacao_robustez>
150
+
130
151
  <fase_4_roteiro>
131
152
  ## Fase 4 — Roteiro
132
153
 
@@ -178,6 +199,7 @@ Percorrer esta lista de verificação:
178
199
  | 4 | **Conflito com stack:** algum requisito v1 pressupõe tecnologia ou capacidade que `STACK.md` indica ausente? (ex.: requer WebSocket mas stack usa REST puro) | Marcar como suposição explícita ou remover |
179
200
  | 5 | **Critérios vagos:** algum A* usa linguagem não-mensurável ("deve ser rápido", "interface amigável") sem métrica? | Refinar: "resposta < 200ms p95", "WCAG 2.1 AA" |
180
201
  | 6 | **Dependências implícitas:** algum requisito v1 pressupõe que outro requisito (v2 ou fora) já esteja implementado? | Tornar dependência explícita ou reordenar versioning |
202
+ | 7 | **Elevação de robustez:** todos os domínios detectados (AUTH, API, DB, FRONTEND, FILE) tiveram R-RB-NN propostos ou explicitamente descartados com justificativa? | Se Fase 3.5 foi pulada sem justificativa, executar agora ou registrar como risco em "Suposições e riscos" |
181
203
 
182
204
  **Resultado obrigatório antes de avançar:**
183
205
  - **0 problemas** → avançar para Fase 5 normalmente.
@@ -222,23 +244,24 @@ O resultado desta reflexão é **invisível ao usuário** — é trabalho intern
222
244
  - Atualizar `STATE.md`: `phase: spec_ready`, próximo passo conforme escolha
223
245
  </fase_5_aprovacao>
224
246
 
225
- <process>
226
- 1. Ler `.oxe/STATE.md`, `OVERVIEW.md`, `STACK.md` e `OBSERVATIONS.md` do escopo ativo (verificar pendentes).
227
- 2. Fazer uma exploração inicial do repo e dos artefatos antes da primeira rodada de perguntas. Consolidar internamente: fatos confirmados, inferências e lacunas.
228
- 3. Aplicar `adaptive-discovery.md`: classificar a demanda, verificar se há capabilities úteis e se investigações anteriores reduzem incerteza.
229
- 4. **Fase 1 — Perguntas:** enviar bloco coeso de 3-5 perguntas; máx 3 rodadas; confirmar entendimento.
230
- 5. **Fase 2 — Pesquisa:** propor áreas de investigação; aguardar aprovação; executar se aprovado.
231
- 6. **Fase 3 — Requisitos:** extrair tabela R-ID com v1/v2/fora e critérios A*; incorporar OBS pendentes; apresentar para validação.
232
- 7. **Fase 4Roteiro:** agrupar requisitos v1 em fases; escrever `ROADMAP.md` no escopo ativo.
233
- 8. Escrever **`SPEC.md`** usando `oxe/templates/SPEC.template.md` no escopo ativo:
234
- - Frontmatter YAML (`oxe_doc: spec`, `status`, `updated`, `inputs`)
235
- - Objetivo, Escopo (dentro/fora), Critérios de aceite (tabela A*), Suposições e riscos, Referências
236
- - Preencher explicitamente `Tipo de demanda` e `Incertezas estruturadas`
237
- - Preservar chaves existentes se SPEC.md existir; atualizar `updated:`
238
- 8b. **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.
239
- 9. **Fase 5 Aprovação:** apresentar resumo, aguardar aprovação do roteiro, redirecionar.
240
- 10. Atualizar **`.oxe/STATE.md`** global: `phase: spec_ready`, próximo passo e referência curta à sessão ativa quando existir.
241
- 11. Marcar OBS incorporadas em `OBSERVATIONS.md` do escopo ativo se houver pendentes de impacto `spec`.
247
+ <process>
248
+ 1. Ler `.oxe/STATE.md`, `OVERVIEW.md`, `STACK.md` e `OBSERVATIONS.md` do escopo ativo (verificar pendentes).
249
+ 2. Fazer uma exploração inicial do repo e dos artefatos antes da primeira rodada de perguntas. Consolidar internamente: fatos confirmados, inferências e lacunas.
250
+ 3. Aplicar `adaptive-discovery.md`: classificar a demanda, verificar se há capabilities úteis e se investigações anteriores reduzem incerteza.
251
+ 4. **Fase 1 — Perguntas:** enviar bloco coeso de 3-5 perguntas; máx 3 rodadas; confirmar entendimento.
252
+ 5. **Fase 2 — Pesquisa:** propor áreas de investigação; aguardar aprovação; executar se aprovado.
253
+ 6. **Fase 3 — Requisitos:** extrair tabela R-ID com v1/v2/fora e critérios A*; incorporar OBS pendentes; apresentar para validação.
254
+ 6.5. **Fase 3.5Elevação de Robustez:** detectar domínios (AUTH/API/DB/FRONTEND/FILE); propor R-RB-NN não cobertos; aguardar decisão; incorporar aprovados na tabela antes de avançar.
255
+ 7. **Fase 4 Roteiro:** agrupar requisitos v1 em fases (incluindo R-RB aprovados); escrever `ROADMAP.md` no escopo ativo.
256
+ 8. Escrever **`SPEC.md`** usando `oxe/templates/SPEC.template.md` no escopo ativo:
257
+ - Frontmatter YAML (`oxe_doc: spec`, `status`, `updated`, `inputs`)
258
+ - Objetivo, Escopo (dentro/fora), Critérios de aceite (tabela A*), Suposições e riscos, Referências
259
+ - Preencher explicitamente `Tipo de demanda` e `Incertezas estruturadas`
260
+ - Preservar chaves existentes se SPEC.md existir; atualizar `updated:`
261
+ 8b. **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.
262
+ 9. **Fase 5 Aprovação:** apresentar resumo, aguardar aprovação do roteiro, redirecionar.
263
+ 10. Atualizar **`.oxe/STATE.md`** global: `phase: spec_ready`, próximo passo e referência curta à sessão ativa quando existir.
264
+ 11. Marcar OBS incorporadas em `OBSERVATIONS.md` do escopo ativo se houver pendentes de impacto `spec`.
242
265
  </process>
243
266
 
244
267
  <success_criteria>
@@ -248,4 +271,5 @@ O resultado desta reflexão é **invisível ao usuário** — é trabalho intern
248
271
  - [ ] Usuário foi consultado no gate da Fase 5 e escolheu o próximo passo.
249
272
  - [ ] OBS pendentes com impacto `spec` foram incorporadas e marcadas `incorporada`.
250
273
  - [ ] Máximo 3 rodadas de perguntas utilizadas — não mais.
274
+ - [ ] Fase 3.5 executada: domínios detectados tiveram R-RB-NN propostos, aprovados ou descartados com justificativa.
251
275
  </success_criteria>
@@ -31,6 +31,7 @@ Se o usuário indicar uma tarefa (ex.: `T2`), focar só nela nas camadas 1–2;
31
31
  - **UI:** se existirem `UI-SPEC.md` / `UI-REVIEW.md` no escopo resolvido, incorporar na evidência quando os critérios **A*** ou tarefas **Tn** tocarem interface.
32
32
  - **Camada 5 — Validate-gaps (automático quando `verification_depth: "thorough"`):** após as 4 camadas, se `verification_depth: "thorough"` em `.oxe/config.json`, executar automaticamente a lógica de `oxe/workflows/validate-gaps.md` e produzir `.oxe/VALIDATION-GAPS.md` como parte deste verify. Não requer comando separado.
33
33
  - **Camada 6 — Security (automático quando `security_in_verify: true`):** se `security_in_verify: true` em `.oxe/config.json`, executar automaticamente a lógica de `oxe/workflows/security.md` e produzir `.oxe/SECURITY.md` como parte deste verify. Não requer comando separado.
34
+ - **Camada QC — Quality Contract (automático quando SPEC.md contiver critérios R-RB):** se a SPEC.md do escopo resolvido contiver requisitos com ID `R-RB-NN` (gerados pela Fase 3.5 — Elevação de Robustez), executar a Camada QC conforme `<camada_qc_quality_contract>`. Não requer comando separado.
34
35
  - **Rotina compact/checkpoint (opcional):** se esta entrega alterou **estrutura**, **stack** ou **pastas** de forma relevante, `/oxe-scan` em modo refresh alinha `.oxe/codebase/` ao repo. Após **verify** com sucesso, `/oxe-project checkpoint` com slug curto pode marcar estado estável.
35
36
  </context>
36
37
 
@@ -103,6 +104,39 @@ Registrar em `VERIFY.md`: `Resultado de calibração | Confiança declarada | Re
103
104
  4. Usar esses artefatos como apoio para a seção de gaps e para a calibração do plano.
104
105
  </runtime_e_checkpoints>
105
106
 
107
+ <camada_qc_quality_contract>
108
+ **Camada QC — Contrato de Qualidade** (ativa quando SPEC.md contiver requisitos R-RB da Fase 3.5)
109
+
110
+ **Objetivo:** verificar que os critérios de qualidade comprometidos na spec (R-RB aprovados como v1) foram efetivamente implementados — com o mesmo rigor de evidência aplicado aos critérios A*.
111
+
112
+ **Execução:**
113
+
114
+ 1. Ler SPEC.md procurando requisitos com ID `R-RB-NN` e versão `v1` na tabela de requisitos.
115
+ 2. Localizar o **Accepted Risk Registry** da SPEC (seção "Suposições e riscos" ou "Riscos Aceitos") — anotar itens R-RB declinados.
116
+ 3. Para cada R-RB aprovado como v1, verificar implementação com evidência (Grep, Read, teste):
117
+
118
+ | ID R-RB | Critério (resumo) | Tier | Evidência | Implementado? |
119
+ |---------|-------------------|------|-----------|---------------|
120
+ | RB-SEC-A1 | Bcrypt salt≥10 | Piso | `grep bcrypt src/` → linha X | ✓ / ✗ |
121
+
122
+ 4. Calcular **Quality Score realizado:**
123
+ ```
124
+ QS_realizado = (Piso_implementados / Piso_aprovados × 60) + (Base_implementados / Base_aprovados × 40)
125
+ ```
126
+ 5. Comparar com Quality Score comprometido na spec (se registrado).
127
+ 6. Registrar na seção **Contrato de Qualidade** do VERIFY.md:
128
+ - Tabela de critérios R-RB (acima)
129
+ - Quality Score comprometido vs realizado
130
+ - Gap: itens aprovados como v1 mas não implementados
131
+
132
+ **Severidade dos gaps:**
133
+ - R-RB **Piso** não implementado → gap P0 → bloqueia `verify_complete` (mesma regra do security P0)
134
+ - R-RB **Base** não implementado → gap P1 → registrar, não bloqueia
135
+ - R-RB **Excelência** não implementado → informativo (estava em v2, não esperado)
136
+
137
+ **Pulável apenas se:** SPEC.md não contiver nenhum R-RB-NN com versão v1.
138
+ </camada_qc_quality_contract>
139
+
106
140
  <process>
107
141
  1. **Camada 1 — Auditoria de pré-execução:** checar integridade do PLAN.md e DISCUSS.md conforme `<camada_1_pre_exec_audit>`. Documentar resultado.
108
142
  2. Resolver o context pack `verify` primeiro:
@@ -142,6 +176,7 @@ O `calibration_error` de cada dimensão = `|score declarado - resultado observad
142
176
  8b. **Retrospectiva (pós-verify):** se `verify_complete`, sugerir **`/oxe-retro`** para capturar aprendizados do ciclo em `.oxe/LESSONS.md`. Especialmente importante quando: houve replanejamento (`--replan`), houve falhas em execute que precisaram de debug, critérios A* foram ajustados durante o ciclo, ou o ciclo durou mais de 2 ondas. Retro antes do próximo spec garante que lições orientem o próximo ciclo.
143
177
  8c. **Camada 5 — Validate-gaps automático:** se `verification_depth: "thorough"` em `.oxe/config.json`, executar a lógica de `oxe/workflows/validate-gaps.md` e adicionar seção **Gaps de Cobertura** ao VERIFY.md (mesmo conteúdo de VALIDATION-GAPS.md). Também escrever `.oxe/VALIDATION-GAPS.md` separado.
144
178
  8d. **Camada 6 — Security automático:** se `security_in_verify: true` em `.oxe/config.json`, executar a lógica de `oxe/workflows/security.md` e adicionar seção **Auditoria de Segurança** ao VERIFY.md. Também escrever `.oxe/SECURITY.md` separado. Achados P0 bloqueiam o `verify_complete` — registrar `verify_failed` até P0s serem resolvidos.
179
+ 8e. **Camada QC — Quality Contract automático:** se SPEC.md contiver requisitos `R-RB-NN` com versão `v1`, executar o bloco `<camada_qc_quality_contract>` e adicionar seção **Contrato de Qualidade** ao VERIFY.md. R-RB Piso não implementados bloqueiam `verify_complete` — registrar `verify_failed` até serem resolvidos ou explicitamente aceitos como risco P0.
145
180
  9. **Só se todas as verificações relevantes passarem:** se `after_verify_draft_commit` não for `false`: acrescentar em **VERIFY.md** a seção **Rascunho de commit** — mensagem convencional (ex.: `feat:` / `fix:`) + bullets alinhados aos critérios **A*** e decisões **D-NN**; **não** incluir segredos.
146
181
  10. **Só se passou:** se `after_verify_suggest_pr` não for `false`: acrescentar **Checklist PR** — branch base, título sugerido, screenshots se UI, links a SPEC/PLAN/DISCUSS, testes executados.
147
182
  11. No chat, responder nesta ordem:
@@ -161,4 +196,5 @@ O `calibration_error` de cada dimensão = `|score declarado - resultado observad
161
196
  - [ ] Se existiu DISCUSS.md: tabela de Fidelidade de decisões preenchida sem divergências não documentadas.
162
197
  - [ ] Se `verification_depth: "thorough"` em config: `.oxe/VALIDATION-GAPS.md` produzido como parte deste verify.
163
198
  - [ ] Se `security_in_verify: true` em config: `.oxe/SECURITY.md` produzido; achados P0 resolvidos ou `verify_failed` registrado.
199
+ - [ ] Se SPEC.md contiver R-RB v1: seção **Contrato de Qualidade** presente em VERIFY.md com Quality Score realizado; R-RB Piso não implementados tratados como gaps P0.
164
200
  </success_criteria>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxe-cc",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "OXE — spec-driven workflows in .oxe/; integrates with Cursor, GitHub Copilot, Claude, OpenCode, Gemini, Codex, Windsurf, Antigravity (npx)",
5
5
  "license": "GPL-3.0",
6
6
  "author": "",