oxe-cc 1.5.1 → 1.6.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 (38) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +27 -0
  3. package/README.md +16 -14
  4. package/bin/lib/oxe-dashboard.cjs +21 -5
  5. package/bin/lib/oxe-project-health.cjs +120 -42
  6. package/bin/lib/oxe-release.cjs +76 -4
  7. package/bin/oxe-cc.js +68 -39
  8. package/docs/RELEASE-READINESS.md +8 -0
  9. package/docs/RUNTIME-SMOKE-MATRIX.md +9 -2
  10. package/lib/sdk/index.cjs +10 -5
  11. package/lib/sdk/index.d.ts +21 -10
  12. package/oxe/templates/CONFIG.md +3 -3
  13. package/oxe/templates/EXECUTION-RUNTIME.template.md +1 -1
  14. package/oxe/templates/FIXTURE-PACK.template.json +34 -34
  15. package/oxe/templates/FIXTURE-PACK.template.md +21 -21
  16. package/oxe/templates/IMPLEMENTATION-PACK.template.json +52 -52
  17. package/oxe/templates/IMPLEMENTATION-PACK.template.md +36 -36
  18. package/oxe/templates/INVESTIGATION.template.md +38 -38
  19. package/oxe/templates/PLAN.template.md +46 -46
  20. package/oxe/templates/REFERENCE-ANCHORS.template.md +24 -24
  21. package/oxe/templates/RESEARCH.template.md +11 -11
  22. package/oxe/templates/SPEC.template.md +6 -6
  23. package/oxe/templates/SUMMARY.template.md +20 -20
  24. package/oxe/templates/config.template.json +1 -1
  25. package/oxe/workflows/execute.md +36 -36
  26. package/oxe/workflows/milestone.md +12 -12
  27. package/oxe/workflows/next.md +1 -1
  28. package/oxe/workflows/plan.md +132 -132
  29. package/oxe/workflows/references/adaptive-discovery.md +27 -27
  30. package/oxe/workflows/references/flow-robustness-contract.md +80 -80
  31. package/oxe/workflows/references/session-path-resolution.md +71 -71
  32. package/oxe/workflows/references/workflow-runtime-contracts.json +127 -127
  33. package/oxe/workflows/verify.md +4 -4
  34. package/oxe/workflows/workstream.md +16 -16
  35. package/package.json +1 -1
  36. package/packages/runtime/package.json +1 -1
  37. package/vscode-extension/oxe-agents-1.6.0.vsix +0 -0
  38. package/vscode-extension/package.json +1 -1
package/bin/oxe-cc.js CHANGED
@@ -1668,10 +1668,11 @@ function runStatusFull(target) {
1668
1668
  sp = oxeHealth.scopedOxePaths(target, activeSession);
1669
1669
  }
1670
1670
 
1671
- printSection('OXE ▸ status --full');
1672
- console.log(` ${c ? green : ''}Projeto:${c ? reset : ''} ${c ? cyan : ''}${target}${c ? reset : ''}`);
1673
- console.log(` ${c ? green : ''}Sessão:${c ? reset : ''} ${c ? cyan : ''}${activeSession || 'modo legado'}${c ? reset : ''}`);
1674
- console.log(` ${c ? green : ''}Fase:${c ? reset : ''} ${report.phase || ''}`);
1671
+ printSection('OXE ▸ status --full');
1672
+ console.log(` ${c ? green : ''}Projeto:${c ? reset : ''} ${c ? cyan : ''}${target}${c ? reset : ''}`);
1673
+ console.log(` ${c ? green : ''}Sessão:${c ? reset : ''} ${c ? cyan : ''}${activeSession || 'modo legado'}${c ? reset : ''}`);
1674
+ console.log(` ${c ? green : ''}Workspace mode:${c ? reset : ''} ${report.workspaceMode || 'oxe_project'}`);
1675
+ console.log(` ${c ? green : ''}Fase:${c ? reset : ''} ${report.phase || '—'}`);
1675
1676
 
1676
1677
  const healthColor = report.healthStatus === 'healthy' ? green : report.healthStatus === 'warning' ? yellow : red;
1677
1678
  console.log(` ${c ? green : ''}Saúde:${c ? reset : ''} ${c ? healthColor : ''}${report.healthStatus}${c ? reset : ''}`);
@@ -1701,23 +1702,40 @@ function runStatusFull(target) {
1701
1702
  console.log(` ${coverageCell(codebaseExists, 'codebase scan')} ${coverageCell(specExists, 'SPEC.md')} ${coverageCell(planExists, 'PLAN.md')} ${coverageCell(verifyExists, 'VERIFY.md')} ${coverageCell(lessonsExists, 'LESSONS.md')}`);
1702
1703
 
1703
1704
  // Readiness gate
1704
- const ready = specExists
1705
- && planExists
1706
- && report.executionRationalityReady
1707
- && !report.planWarn.length
1708
- && !report.runtimeWarn.length;
1709
- const gateColor = ready ? green : yellow;
1710
- console.log(`\n ${c ? yellow : ''}Readiness gate${c ? reset : ''}`);
1711
- console.log(` ${c ? gateColor : ''}${ready ? '✓ Pronto para executar' : '✗ Não pronto para executar'}${c ? reset : ''}`);
1712
- if (!specExists) console.log(` ${c ? dim : ''} • SPEC.md ausente — rode /oxe-spec${c ? reset : ''}`);
1713
- if (!planExists) console.log(` ${c ? dim : ''} PLAN.md ausente — rode /oxe-plan${c ? reset : ''}`);
1714
- if (report.planWarn.length) {
1715
- for (const w of report.planWarn) {
1716
- console.log(` ${c ? yellow : ''} • ${w}${c ? reset : ''}`);
1705
+ const packageMode = report.workspaceMode === 'product_package';
1706
+ const ready = packageMode
1707
+ ? Boolean(report.releaseReadiness && report.releaseReadiness.ok)
1708
+ : specExists
1709
+ && planExists
1710
+ && report.executionRationalityReady
1711
+ && !report.planWarn.length
1712
+ && !report.runtimeWarn.length;
1713
+ const gateColor = ready ? green : yellow;
1714
+ console.log(`\n ${c ? yellow : ''}Readiness gate${c ? reset : ''}`);
1715
+ console.log(` ${c ? gateColor : ''}${ready ? (packageMode ? '✓ Pronto para publicar' : '✓ Pronto para executar') : (packageMode ? '✗ Não pronto para publicar' : '✗ Não pronto para executar')}${c ? reset : ''}`);
1716
+ if (packageMode) {
1717
+ const releaseReadiness = report.releaseReadiness || { blockers: [], warnings: [] };
1718
+ if (Array.isArray(releaseReadiness.blockers) && releaseReadiness.blockers.length) {
1719
+ for (const blocker of releaseReadiness.blockers) {
1720
+ console.log(` ${c ? red : ''} • ${blocker}${c ? reset : ''}`);
1721
+ }
1722
+ }
1723
+ if (Array.isArray(releaseReadiness.warnings) && releaseReadiness.warnings.length) {
1724
+ for (const warning of releaseReadiness.warnings) {
1725
+ console.log(` ${c ? yellow : ''} • ${warning}${c ? reset : ''}`);
1726
+ }
1727
+ }
1728
+ } else {
1729
+ if (!specExists) console.log(` ${c ? dim : ''} • SPEC.md ausente — rode /oxe-spec${c ? reset : ''}`);
1730
+ if (!planExists) console.log(` ${c ? dim : ''} • PLAN.md ausente — rode /oxe-plan${c ? reset : ''}`);
1731
+ if (report.planWarn.length) {
1732
+ for (const w of report.planWarn) {
1733
+ console.log(` ${c ? yellow : ''} • ${w}${c ? reset : ''}`);
1734
+ }
1735
+ }
1736
+ if (planExists) {
1737
+ console.log(` ${c ? dim : ''} • Artefatos racionais:${c ? reset : ''} implementation=${report.implementationPackReady ? 'ok' : 'pendente'} · anchors=${report.referenceAnchorsReady ? 'ok' : 'pendente'} · fixtures=${report.fixturePackReady ? 'ok' : 'pendente'}`);
1717
1738
  }
1718
- }
1719
- if (planExists) {
1720
- console.log(` ${c ? dim : ''} • Artefatos racionais:${c ? reset : ''} implementation=${report.implementationPackReady ? 'ok' : 'pendente'} · anchors=${report.referenceAnchorsReady ? 'ok' : 'pendente'} · fixtures=${report.fixturePackReady ? 'ok' : 'pendente'}`);
1721
1739
  }
1722
1740
 
1723
1741
  // Active run summary
@@ -1804,7 +1822,7 @@ function runStatusFull(target) {
1804
1822
  }
1805
1823
 
1806
1824
  // Plan self-evaluation
1807
- if (report.planSelfEvaluation) {
1825
+ if (!packageMode && report.planSelfEvaluation) {
1808
1826
  const pse = report.planSelfEvaluation;
1809
1827
  const threshold = report.planConfidenceThreshold || 90;
1810
1828
  console.log(`\n ${c ? yellow : ''}Autoavaliação do plano${c ? reset : ''}`);
@@ -1840,11 +1858,13 @@ function runStatus(target, opts = {}) {
1840
1858
  const next = report.next;
1841
1859
 
1842
1860
  if (opts.json) {
1843
- /** @type {Record<string, unknown>} */
1844
- const payload = {
1845
- oxeStatusSchema: 5,
1846
- projectRoot: path.resolve(target),
1847
- nextStep: report.next.step,
1861
+ /** @type {Record<string, unknown>} */
1862
+ const payload = {
1863
+ oxeStatusSchema: 5,
1864
+ projectRoot: path.resolve(target),
1865
+ workspaceMode: report.workspaceMode || 'oxe_project',
1866
+ releaseReadiness: report.releaseReadiness || null,
1867
+ nextStep: report.next.step,
1848
1868
  cursorCmd: report.next.cursorCmd,
1849
1869
  reason: report.next.reason,
1850
1870
  artifacts: report.next.artifacts,
@@ -1921,9 +1941,10 @@ function runStatus(target, opts = {}) {
1921
1941
  return;
1922
1942
  }
1923
1943
 
1924
- printSection('OXE ▸ status');
1925
- const c = useAnsiColors();
1926
- console.log(` ${c ? green : ''}Projeto:${c ? reset : ''} ${c ? cyan : ''}${target}${c ? reset : ''}`);
1944
+ printSection('OXE ▸ status');
1945
+ const c = useAnsiColors();
1946
+ console.log(` ${c ? green : ''}Projeto:${c ? reset : ''} ${c ? cyan : ''}${target}${c ? reset : ''}`);
1947
+ console.log(` ${c ? dim : ''}Workspace mode:${c ? reset : ''} ${report.workspaceMode || 'oxe_project'}`);
1927
1948
 
1928
1949
  const wfTgt = oxeWorkflows.resolveWorkflowsDir(target);
1929
1950
  if (!wfTgt) {
@@ -1954,16 +1975,24 @@ function runStatus(target, opts = {}) {
1954
1975
  }
1955
1976
 
1956
1977
  // Explicit blockage diagnosis
1957
- const specMissing = !fs.existsSync(path.join(target, '.oxe', 'SPEC.md'));
1958
- const planMissing = !fs.existsSync(path.join(target, '.oxe', 'PLAN.md'));
1959
- const verifyMissing = !fs.existsSync(path.join(target, '.oxe', 'VERIFY.md'));
1960
- if (specMissing) {
1961
- console.log(` ${c ? yellow : ''}⚠ Bloqueio:${c ? reset : ''} SPEC.md ausente — rode ${c ? cyan : ''}/oxe-spec${c ? reset : ''} antes de planejar`);
1962
- } else if (planMissing) {
1963
- console.log(` ${c ? yellow : ''}⚠ Bloqueio:${c ? reset : ''} PLAN.md ausente — rode ${c ? cyan : ''}/oxe-plan${c ? reset : ''}`);
1964
- } else if (verifyMissing && !planMissing) {
1965
- console.log(` ${c ? dim : ''}Obs.:${c ? reset : ''} VERIFY.md ainda não gerado — rode ${c ? cyan : ''}/oxe-verify${c ? reset : ''} após executar`);
1966
- }
1978
+ const packageMode = report.workspaceMode === 'product_package';
1979
+ const specMissing = !fs.existsSync(path.join(target, '.oxe', 'SPEC.md'));
1980
+ const planMissing = !fs.existsSync(path.join(target, '.oxe', 'PLAN.md'));
1981
+ const verifyMissing = !fs.existsSync(path.join(target, '.oxe', 'VERIFY.md'));
1982
+ if (packageMode) {
1983
+ const releaseReadiness = report.releaseReadiness || { ok: false, blockers: [], warnings: [] };
1984
+ if (!releaseReadiness.ok && Array.isArray(releaseReadiness.blockers) && releaseReadiness.blockers.length) {
1985
+ console.log(` ${c ? yellow : ''} Release blockers:${c ? reset : ''} ${releaseReadiness.blockers[0]}`);
1986
+ } else if (Array.isArray(releaseReadiness.warnings) && releaseReadiness.warnings.length) {
1987
+ console.log(` ${c ? dim : ''}Obs.:${c ? reset : ''} release warnings ativas — ${releaseReadiness.warnings[0]}`);
1988
+ }
1989
+ } else if (specMissing) {
1990
+ console.log(` ${c ? yellow : ''}⚠ Bloqueio:${c ? reset : ''} SPEC.md ausente — rode ${c ? cyan : ''}/oxe-spec${c ? reset : ''} antes de planejar`);
1991
+ } else if (planMissing) {
1992
+ console.log(` ${c ? yellow : ''}⚠ Bloqueio:${c ? reset : ''} PLAN.md ausente — rode ${c ? cyan : ''}/oxe-plan${c ? reset : ''}`);
1993
+ } else if (verifyMissing && !planMissing) {
1994
+ console.log(` ${c ? dim : ''}Obs.:${c ? reset : ''} VERIFY.md ainda não gerado — rode ${c ? cyan : ''}/oxe-verify${c ? reset : ''} após executar`);
1995
+ }
1967
1996
 
1968
1997
  if (opts.hints) {
1969
1998
  console.log(`\n ${c ? cyan : ''}Lembretes (rotina OXE)${reset}`);
@@ -13,10 +13,13 @@ npx oxe-cc doctor --release --write-manifest
13
13
 
14
14
  O `doctor --release` deve bloquear a publicação quando encontrar:
15
15
 
16
+ - árvore canónica `oxe/workflows/`, `oxe/workflows/references/` ou `commands/oxe/` ausente
17
+ - `workflow-runtime-contracts.json` ausente ou inválido
16
18
  - drift de versão entre `package.json`, `packages/runtime/package.json`, `vscode-extension/package.json`, `README.md`, `CHANGELOG.md` e banner
17
19
  - topo do `CHANGELOG` ausente, sem data ou sem highlights
18
20
  - runtime não compilado em `lib/runtime/index.js`
19
21
  - wrappers dirty após `sync-runtime-metadata` e `sync:cursor`
22
+ - drift semântico entre workflows canónicos e superfícies geradas
20
23
  - ausência ou falha dos relatórios obrigatórios da release
21
24
 
22
25
  ## Relatórios obrigatórios
@@ -44,3 +47,8 @@ O pipeline de CI e o pipeline de release devem rodar o mesmo gate:
44
47
  3. `npm run release:doctor`
45
48
 
46
49
  Se qualquer etapa falhar, a release não está pronta.
50
+
51
+ ## Observações operacionais
52
+
53
+ - `status` e `status --full` distinguem agora `workspaceMode: product_package` de `workspaceMode: oxe_project`.
54
+ - No repositório do pacote, readiness passa a ser de publicação; o CLI deixa de bloquear por ausência de `PLAN.md` executável quando não há ciclo ativo declarado.
@@ -1,6 +1,6 @@
1
1
  # OXE — Runtime Smoke Matrix
2
2
 
3
- > Estado de suporte por runtime de IA. Atualizado em v1.5.1.
3
+ > Estado de suporte por runtime de IA. Atualizado em v1.6.0.
4
4
  >
5
5
  > `✓` = suportado e testado | `~` = suportado parcialmente | `✗` = não suportado | `?` = não testado
6
6
 
@@ -60,11 +60,18 @@ Este documento descreve a matrix estável da release. O artefato operacional con
60
60
 
61
61
  ### Codex CLI
62
62
 
63
- - Lê `.github/prompts/` via `--instructions` flag
63
+ - Lê `.codex/prompts/` como entrypoint e depende também de skills em `.agents/skills/oxe/`
64
+ - A smoke matrix desta release valida **prompts e skills**; falha se um dos dois lados estiver ausente ou sem a política de resolução de workflow
64
65
  - `verify` parcial: gera VERIFY.md mas evidências são menos detalhadas (sem análise de AST)
65
66
  - `runtime-first` não suportado: Codex CLI não tem acesso a subprocessos Node
66
67
  - **Limitação:** não suporta contexto multi-arquivo simultâneo em tasks longas
67
68
 
69
+ ### Escopo de instalação
70
+
71
+ - `--local` define o layout do repositório (`oxe/` + `.oxe/` vs só `.oxe/`)
72
+ - `--ide-local` define que a integração do runtime deve ser instalada no próprio projeto
73
+ - Para Codex, `install --codex --ide-local` é o fluxo correto quando a intenção é materializar `.codex/` e `.agents/` no repositório atual
74
+
68
75
  ### Gemini CLI
69
76
 
70
77
  - `plan` e `execute` parciais: segue o fluxo mas pode divergir dos critérios A* do SPEC
package/lib/sdk/index.cjs CHANGED
@@ -552,11 +552,13 @@ module.exports = {
552
552
  deprecateLowEffectiveness,
553
553
 
554
554
  /** Estado do projeto, SPEC/PLAN, fase, config. */
555
- health: {
556
- loadOxeConfigMerged: health.loadOxeConfigMerged,
557
- validateConfigShape: health.validateConfigShape,
558
- buildHealthReport: health.buildHealthReport,
559
- suggestNextStep: health.suggestNextStep,
555
+ health: {
556
+ loadOxeConfigMerged: health.loadOxeConfigMerged,
557
+ validateConfigShape: health.validateConfigShape,
558
+ buildHealthReport: health.buildHealthReport,
559
+ detectWorkspaceMode: health.detectWorkspaceMode,
560
+ shouldSuppressExecutionWorkspaceGates: health.shouldSuppressExecutionWorkspaceGates,
561
+ suggestNextStep: health.suggestNextStep,
560
562
  oxePaths: health.oxePaths,
561
563
  parseStatePhase: health.parseStatePhase,
562
564
  parseLastScanDate: health.parseLastScanDate,
@@ -658,6 +660,9 @@ module.exports = {
658
660
  loadRecoveryFixtureReport: release.loadRecoveryFixtureReport,
659
661
  loadMultiAgentSoakReport: release.loadMultiAgentSoakReport,
660
662
  buildReleaseManifest: release.buildReleaseManifest,
663
+ inspectCanonicalSource: release.inspectCanonicalSource,
664
+ evaluateReleaseManifest: release.evaluateReleaseManifest,
665
+ inspectReleaseReadiness: release.inspectReleaseReadiness,
661
666
  checkReleaseConsistency: release.checkReleaseConsistency,
662
667
  },
663
668
 
@@ -160,6 +160,8 @@ export interface MultiAgentStatusSummary {
160
160
  summary?: Record<string, unknown> | null;
161
161
  }
162
162
 
163
+ export type WorkspaceMode = 'product_package' | 'oxe_project';
164
+
163
165
  export interface ReleaseManifest {
164
166
  schema_version: number;
165
167
  generated_at: string;
@@ -168,6 +170,8 @@ export interface ReleaseManifest {
168
170
  release_contract: Record<string, unknown>;
169
171
  versions: Record<string, unknown>;
170
172
  runtime_compiled: { path: string; ok: boolean };
173
+ canonical_source?: Record<string, unknown>;
174
+ semantics?: Record<string, unknown>;
171
175
  wrappers: Record<string, unknown>;
172
176
  reports: Record<string, unknown>;
173
177
  }
@@ -283,8 +287,9 @@ export interface ExecutionRationalitySummary {
283
287
  }
284
288
 
285
289
  /** Relatório retornado por `health.buildHealthReport` e incluído em `runDoctorChecks`.healthReport. */
286
- export interface OxeHealthReport {
287
- configPath: string | null;
290
+ export interface OxeHealthReport {
291
+ workspaceMode?: WorkspaceMode;
292
+ configPath: string | null;
288
293
  configParseError: string | null;
289
294
  unknownConfigKeys: string[];
290
295
  typeErrors: string[];
@@ -334,9 +339,10 @@ export interface OxeHealthReport {
334
339
  contextWarn?: string[];
335
340
  semanticsWarn?: string[];
336
341
  contextPacks?: Record<string, ContextPackSummary>;
337
- contextQuality?: ContextQualitySummary;
338
- semanticsDrift?: SemanticsDriftSummary;
339
- packFreshness?: Record<string, PackFreshness>;
342
+ contextQuality?: ContextQualitySummary;
343
+ semanticsDrift?: SemanticsDriftSummary;
344
+ releaseReadiness?: ReleaseConsistencyResult | null;
345
+ packFreshness?: Record<string, PackFreshness>;
340
346
  activeSummaryRefs?: { project: string | null; session: string | null; phase: string | null };
341
347
  scanFocusGlobs?: unknown;
342
348
  scanIgnoreGlobs?: unknown;
@@ -689,11 +695,13 @@ export interface OxeSdk {
689
695
  timeoutMs?: number;
690
696
  }) => Promise<Record<string, unknown>>;
691
697
 
692
- health: {
693
- loadOxeConfigMerged: (targetProject: string) => { config: Record<string, unknown>; path: string | null; parseError: string | null; sources: { system: string | null; user: string | null; project: string | null } };
694
- validateConfigShape: (cfg: Record<string, unknown>) => { unknownKeys: string[]; typeErrors: string[] };
695
- buildHealthReport: (target: string) => OxeHealthReport;
696
- suggestNextStep: (target: string, cfg?: { discuss_before_plan?: boolean }) => OxeNextSuggestion;
698
+ health: {
699
+ loadOxeConfigMerged: (targetProject: string) => { config: Record<string, unknown>; path: string | null; parseError: string | null; sources: { system: string | null; user: string | null; project: string | null } };
700
+ validateConfigShape: (cfg: Record<string, unknown>) => { unknownKeys: string[]; typeErrors: string[] };
701
+ buildHealthReport: (target: string) => OxeHealthReport;
702
+ detectWorkspaceMode: (target: string) => { workspaceMode: WorkspaceMode; packageName: string | null; canonicalTreePresent: boolean; commandsTreePresent: boolean };
703
+ shouldSuppressExecutionWorkspaceGates: (workspaceMode: WorkspaceMode, phase?: string | null, activeSession?: string | null, activeRun?: Record<string, unknown> | null) => boolean;
704
+ suggestNextStep: (target: string, cfg?: { discuss_before_plan?: boolean }) => OxeNextSuggestion;
697
705
  oxePaths: (target: string) => Record<string, string>;
698
706
  parseStatePhase: (stateText: string) => string | null;
699
707
  parseLastScanDate: (stateText: string) => Date | null;
@@ -787,6 +795,9 @@ export interface OxeSdk {
787
795
  loadRecoveryFixtureReport: (projectRoot: string) => RuntimeSmokeReport;
788
796
  loadMultiAgentSoakReport: (projectRoot: string) => RuntimeSmokeReport;
789
797
  buildReleaseManifest: (projectRoot: string, options?: Record<string, unknown>) => ReleaseManifest;
798
+ inspectCanonicalSource: (projectRoot: string) => Record<string, unknown>;
799
+ evaluateReleaseManifest: (manifest: ReleaseManifest, options?: Record<string, unknown>) => ReleaseConsistencyResult;
800
+ inspectReleaseReadiness: (projectRoot: string, options?: Record<string, unknown>) => ReleaseConsistencyResult;
790
801
  checkReleaseConsistency: (projectRoot: string, options?: Record<string, unknown>) => ReleaseConsistencyResult;
791
802
  };
792
803
 
@@ -8,9 +8,9 @@ Copie `oxe/templates/config.template.json` para **`.oxe/config.json`** no seu pr
8
8
  |-------|------|-------------|
9
9
  | `profile` | string | Profile de execução: `balanced` (padrão) \| `strict` \| `fast` \| `legacy`. Expande automaticamente outras keys — keys explícitas prevalecem. Ver tabela abaixo. |
10
10
  | `discuss_before_plan` | boolean | Se `true`, o fluxo recomenda **`oxe:discuss`** entre spec e plan. |
11
- | `verification_depth` | string | Profundidade da verificação: `standard` (padrão) \| `thorough` (ativa Camada 5 — validate-gaps automático) \| `quick` (skip camadas 3–4 e UAT). |
12
- | `plan_confidence_threshold` | number | Limiar mínimo de confiança para o `execute` aceitar um `PLAN.md`. Padrão canónico: `90`, com gate estrito (`Confiança` precisa ser **maior que** o limiar). Valores menores que 90 não reduzem esse gate. |
13
- | `security_in_verify` | boolean | Se `true`, executa auditoria OWASP automaticamente no **verify** como **Camada 6** (produz `.oxe/SECURITY.md`). Achados P0 bloqueiam `verify_complete`. Padrão: `false`. |
11
+ | `verification_depth` | string | Profundidade da verificação: `standard` (padrão) \| `thorough` (ativa Camada 5 — validate-gaps automático) \| `quick` (skip camadas 3–4 e UAT). |
12
+ | `plan_confidence_threshold` | number | Limiar mínimo de confiança para o `execute` aceitar um `PLAN.md`. Padrão canónico: `90`, com gate estrito (`Confiança` precisa ser **maior que** o limiar). Valores menores que 90 não reduzem esse gate. |
13
+ | `security_in_verify` | boolean | Se `true`, executa auditoria OWASP automaticamente no **verify** como **Camada 6** (produz `.oxe/SECURITY.md`). Achados P0 bloqueiam `verify_complete`. Padrão: `false`. |
14
14
  | `after_verify_suggest_pr` | boolean | Se `true`, o workflow **verify** inclui checklist de PR no fim. |
15
15
  | `after_verify_draft_commit` | boolean | Se `true`, o **verify** propõe rascunho de mensagem de commit alinhado aos critérios de aceite. |
16
16
  | `after_verify_suggest_uat` | boolean | Se `true`, o **verify** gera checklist UAT (Camada 4). Ativo automaticamente com `profile: strict`. |
@@ -16,7 +16,7 @@ updated: YYYY-MM-DD
16
16
  - **Active run:** `.oxe/ACTIVE-RUN.json` ou artefato equivalente de sessão
17
17
  - **Trace log:** `.oxe/OXE-EVENTS.ndjson` ou artefato equivalente de sessão
18
18
  - **Autoavaliação do plano:** melhor=`sim|não` | confiança=`NN%`
19
- - **Limiar de execução:** `>90%`
19
+ - **Limiar de execução:** `>90%`
20
20
 
21
21
  ## Onda atual
22
22
 
@@ -1,34 +1,34 @@
1
- {
2
- "schema_version": "1",
3
- "generated_at": "YYYY-MM-DDTHH:MM:SSZ",
4
- "ready": false,
5
- "critical_gaps": [],
6
- "fixtures": [
7
- {
8
- "id": "FX-01",
9
- "task_id": "T1",
10
- "status": "ready",
11
- "inputs": [
12
- {
13
- "kind": "payload",
14
- "ref": ".oxe/investigations/fixtures/example-input.json",
15
- "summary": "payload base para validar o fluxo"
16
- }
17
- ],
18
- "expected_outputs": [
19
- {
20
- "kind": "status",
21
- "summary": "deve concluir sem erro e persistir o artefato esperado"
22
- }
23
- ],
24
- "expected_checks": [
25
- "npm test -- example"
26
- ],
27
- "critical_fields": [
28
- "id",
29
- "status"
30
- ],
31
- "critical_gaps": []
32
- }
33
- ]
34
- }
1
+ {
2
+ "schema_version": "1",
3
+ "generated_at": "YYYY-MM-DDTHH:MM:SSZ",
4
+ "ready": false,
5
+ "critical_gaps": [],
6
+ "fixtures": [
7
+ {
8
+ "id": "FX-01",
9
+ "task_id": "T1",
10
+ "status": "ready",
11
+ "inputs": [
12
+ {
13
+ "kind": "payload",
14
+ "ref": ".oxe/investigations/fixtures/example-input.json",
15
+ "summary": "payload base para validar o fluxo"
16
+ }
17
+ ],
18
+ "expected_outputs": [
19
+ {
20
+ "kind": "status",
21
+ "summary": "deve concluir sem erro e persistir o artefato esperado"
22
+ }
23
+ ],
24
+ "expected_checks": [
25
+ "npm test -- example"
26
+ ],
27
+ "critical_fields": [
28
+ "id",
29
+ "status"
30
+ ],
31
+ "critical_gaps": []
32
+ }
33
+ ]
34
+ }
@@ -1,21 +1,21 @@
1
- # OXE — Fixture Pack
2
-
3
- > Fixtures mínimos para reduzir improviso em parsing, integração, transformação, migração e builders.
4
-
5
- ## Status
6
-
7
- - **Status:** ready | not_ready | not_applicable
8
- - **Critical gaps abertos:** nenhum | listar
9
-
10
- ## Fixtures
11
-
12
- ### FX-01 — T1
13
-
14
- - **Task:** T1
15
- - **Status:** ready | missing | not_applicable
16
- - **Inputs:** payload, arquivo exemplo, query, blob ou mensagem
17
- - **Expected outputs:** linha, evento, arquivo, rowset, status etc.
18
- - **Expected checks:** `...`
19
- - **Campos críticos / offsets:** ...
20
- - **Smoke command:** `...`
21
- - **Critical gaps:** nenhum | listar
1
+ # OXE — Fixture Pack
2
+
3
+ > Fixtures mínimos para reduzir improviso em parsing, integração, transformação, migração e builders.
4
+
5
+ ## Status
6
+
7
+ - **Status:** ready | not_ready | not_applicable
8
+ - **Critical gaps abertos:** nenhum | listar
9
+
10
+ ## Fixtures
11
+
12
+ ### FX-01 — T1
13
+
14
+ - **Task:** T1
15
+ - **Status:** ready | missing | not_applicable
16
+ - **Inputs:** payload, arquivo exemplo, query, blob ou mensagem
17
+ - **Expected outputs:** linha, evento, arquivo, rowset, status etc.
18
+ - **Expected checks:** `...`
19
+ - **Campos críticos / offsets:** ...
20
+ - **Smoke command:** `...`
21
+ - **Critical gaps:** nenhum | listar
@@ -1,52 +1,52 @@
1
- {
2
- "schema_version": "1",
3
- "generated_at": "YYYY-MM-DDTHH:MM:SSZ",
4
- "ready": false,
5
- "critical_gaps": [],
6
- "tasks": [
7
- {
8
- "id": "T1",
9
- "title": "substituir pelo título da tarefa",
10
- "mode": "mutating",
11
- "ready": false,
12
- "exact_paths": [
13
- "src/example.ts"
14
- ],
15
- "write_set": "closed",
16
- "symbols": [
17
- {
18
- "kind": "function",
19
- "name": "exampleHandler",
20
- "path": "src/example.ts",
21
- "signature": "(input: ExampleInput) => ExampleOutput"
22
- }
23
- ],
24
- "contracts": [
25
- {
26
- "name": "example-contract",
27
- "input_shape": "ExampleInput",
28
- "output_shape": "ExampleOutput",
29
- "invariants": [
30
- "não perder campos obrigatórios"
31
- ],
32
- "not_allowed": [
33
- "mutar schema fora do write set"
34
- ]
35
- }
36
- ],
37
- "snippets": [
38
- {
39
- "source_ref": "not_applicable",
40
- "path": "not_applicable",
41
- "summary": "not_applicable",
42
- "status": "not_applicable"
43
- }
44
- ],
45
- "expected_checks": [
46
- "npm test -- example"
47
- ],
48
- "requires_fixture": false,
49
- "critical_gaps": []
50
- }
51
- ]
52
- }
1
+ {
2
+ "schema_version": "1",
3
+ "generated_at": "YYYY-MM-DDTHH:MM:SSZ",
4
+ "ready": false,
5
+ "critical_gaps": [],
6
+ "tasks": [
7
+ {
8
+ "id": "T1",
9
+ "title": "substituir pelo título da tarefa",
10
+ "mode": "mutating",
11
+ "ready": false,
12
+ "exact_paths": [
13
+ "src/example.ts"
14
+ ],
15
+ "write_set": "closed",
16
+ "symbols": [
17
+ {
18
+ "kind": "function",
19
+ "name": "exampleHandler",
20
+ "path": "src/example.ts",
21
+ "signature": "(input: ExampleInput) => ExampleOutput"
22
+ }
23
+ ],
24
+ "contracts": [
25
+ {
26
+ "name": "example-contract",
27
+ "input_shape": "ExampleInput",
28
+ "output_shape": "ExampleOutput",
29
+ "invariants": [
30
+ "não perder campos obrigatórios"
31
+ ],
32
+ "not_allowed": [
33
+ "mutar schema fora do write set"
34
+ ]
35
+ }
36
+ ],
37
+ "snippets": [
38
+ {
39
+ "source_ref": "not_applicable",
40
+ "path": "not_applicable",
41
+ "summary": "not_applicable",
42
+ "status": "not_applicable"
43
+ }
44
+ ],
45
+ "expected_checks": [
46
+ "npm test -- example"
47
+ ],
48
+ "requires_fixture": false,
49
+ "critical_gaps": []
50
+ }
51
+ ]
52
+ }
@@ -1,36 +1,36 @@
1
- # OXE — Implementation Pack
2
-
3
- > Contrato racional de implementação por tarefa. Este arquivo complementa o `PLAN.md` e fecha write-set, symbols, contracts e checks esperados antes do `/oxe-execute`.
4
-
5
- ## Status
6
-
7
- - **Status:** ready | not_ready | not_applicable
8
- - **Critical gaps abertos:** nenhum | listar
9
- - **Fonte:** `PLAN.md` + código real + anchors locais
10
-
11
- ## Tarefas
12
-
13
- ### T1 — (título)
14
-
15
- - **Mode:** mutating | docs_only | external | not_applicable
16
- - **Ready:** true | false
17
- - **Exact paths:** `src/...`, `config/...`
18
- - **Write set:** closed | external | not_applicable
19
- - **Symbols alvo:**
20
- - `kind:name(path)` — assinatura ou shape esperado
21
- - **Contracts:**
22
- - **Nome:** (ex.: payload parser)
23
- - **Entrada:** ...
24
- - **Saída:** ...
25
- - **Invariants:** ...
26
- - **Not allowed:** ...
27
- - **Expected checks:**
28
- - `...`
29
- - **Requires fixture:** true | false
30
- - **Snippet/base local:** path ou `not_applicable`
31
- - **Critical gaps:** nenhum | listar
32
-
33
- ## Observações
34
-
35
- - Use caminhos exatos; não usar `...`.
36
- - Tarefa mutável sem `symbols`, `contracts`, `write_set: closed` e `expected_checks` não deve sustentar confiança `> 90%`.
1
+ # OXE — Implementation Pack
2
+
3
+ > Contrato racional de implementação por tarefa. Este arquivo complementa o `PLAN.md` e fecha write-set, symbols, contracts e checks esperados antes do `/oxe-execute`.
4
+
5
+ ## Status
6
+
7
+ - **Status:** ready | not_ready | not_applicable
8
+ - **Critical gaps abertos:** nenhum | listar
9
+ - **Fonte:** `PLAN.md` + código real + anchors locais
10
+
11
+ ## Tarefas
12
+
13
+ ### T1 — (título)
14
+
15
+ - **Mode:** mutating | docs_only | external | not_applicable
16
+ - **Ready:** true | false
17
+ - **Exact paths:** `src/...`, `config/...`
18
+ - **Write set:** closed | external | not_applicable
19
+ - **Symbols alvo:**
20
+ - `kind:name(path)` — assinatura ou shape esperado
21
+ - **Contracts:**
22
+ - **Nome:** (ex.: payload parser)
23
+ - **Entrada:** ...
24
+ - **Saída:** ...
25
+ - **Invariants:** ...
26
+ - **Not allowed:** ...
27
+ - **Expected checks:**
28
+ - `...`
29
+ - **Requires fixture:** true | false
30
+ - **Snippet/base local:** path ou `not_applicable`
31
+ - **Critical gaps:** nenhum | listar
32
+
33
+ ## Observações
34
+
35
+ - Use caminhos exatos; não usar `...`.
36
+ - Tarefa mutável sem `symbols`, `contracts`, `write_set: closed` e `expected_checks` não deve sustentar confiança `> 90%`.