@dewtech/dare-cli 3.12.0 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -166,7 +166,7 @@ Pick **one** of the two paths per stack:
166
166
 
167
167
  > **v3.8.1–3.8.2 (manutenção):** `dare update` passa a entregar os skills/comandos/config das v3.4→v3.8 a projetos existentes (backfill do `UPDATE-MANIFEST`, 3.8.1). O CI ganha um **gate de cobertura de docs** + **redeploy automático da documentação** a cada release (3.8.2).
168
168
 
169
- > **v3.12.0:** **Terminal Agent Parity** — `dare <cmd> --ai` `/dare-<cmd>`; `--json` uniforme; drivers `cursor`/`antigravity` no `execute --agent`; `ai/resolve` + `ai/parity`; apply completo migrate/review; `dare ai doctor`.
169
+ > **v3.13.0:** **CLI-only cleanup** — legado MkDocs/landing removido; monorepo enxuto; doc canônica em `docs-site/`; testes `cli-only-invariants`.
170
170
 
171
171
  > **v3.11.0:** **Dynamic DAG** — `REPLAN` splice de sub-DAG em runtime (`refine --split` + `spliceSubDag`); `verification.loop.maxDepth` (default **2**, excedeu → `ESCALATE`); `dare refine --split --apply` (modo manual); `dare dag viz` agrupa sub-DAGs (`subgraph Sub-DAG: <pai>` em Mermaid/DOT/Excalidraw); estado persiste em `dare-dag.yaml` + `.dare/state.json`.
172
172
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli-only-invariants.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-only-invariants.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli-only-invariants.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Structural invariants for CLI-only monorepo (v3.13+).
3
+ * Prevents reintroduction of legacy packages/docs and packages/website.
4
+ */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { describe, it, expect } from 'vitest';
9
+ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../..');
10
+ const LEGACY_DIRS = ['packages/docs', 'packages/website'];
11
+ const REF_PATTERN = /packages\/(?:docs|website)/;
12
+ /** Paths where legacy refs are allowed (planning/history artifacts). */
13
+ const REF_ALLOWLIST = [
14
+ /^DARE\/DESIGN-/,
15
+ /^DARE\/BLUEPRINT-/,
16
+ /^DARE\/TASKS-/,
17
+ /^DARE\/dare-dag-/,
18
+ /^DARE\/EXECUTION\//,
19
+ /^CHANGELOG\.md$/,
20
+ /^\.dare\//,
21
+ /^DARE\/\.canvas\.md$/,
22
+ ];
23
+ const REF_SCAN_ROOTS = [
24
+ 'README.md',
25
+ 'ROADMAP.md',
26
+ 'packages/cli/README.md',
27
+ 'packages/cli/src',
28
+ 'implementations',
29
+ 'docs-site',
30
+ 'docs',
31
+ ];
32
+ function relPosix(abs) {
33
+ return path.relative(repoRoot, abs).replace(/\\/g, '/');
34
+ }
35
+ function walkFiles(dir, acc = []) {
36
+ if (!fs.existsSync(dir))
37
+ return acc;
38
+ for (const name of fs.readdirSync(dir)) {
39
+ const full = path.join(dir, name);
40
+ const stat = fs.statSync(full);
41
+ if (stat.isDirectory()) {
42
+ if (name === 'node_modules' || name === 'dist' || name === '.git' || name === 'coverage') {
43
+ continue;
44
+ }
45
+ walkFiles(full, acc);
46
+ }
47
+ else if (/\.(md|ts|tsx|js|mjs|json|yml|yaml|html)$/i.test(name)) {
48
+ acc.push(full);
49
+ }
50
+ }
51
+ return acc;
52
+ }
53
+ function collectScanFiles() {
54
+ const files = [];
55
+ for (const root of REF_SCAN_ROOTS) {
56
+ const abs = path.join(repoRoot, root);
57
+ if (!fs.existsSync(abs))
58
+ continue;
59
+ if (fs.statSync(abs).isFile()) {
60
+ files.push(abs);
61
+ }
62
+ else {
63
+ walkFiles(abs, files);
64
+ }
65
+ }
66
+ return files;
67
+ }
68
+ describe('cli-only structural invariants (v3.13+)', () => {
69
+ it('legacy packages/docs and packages/website directories are absent', () => {
70
+ for (const dir of LEGACY_DIRS) {
71
+ expect(fs.existsSync(path.join(repoRoot, dir)), dir).toBe(false);
72
+ }
73
+ });
74
+ it('required CLI-only paths exist', () => {
75
+ expect(fs.existsSync(path.join(repoRoot, 'packages/cli/package.json'))).toBe(true);
76
+ expect(fs.existsSync(path.join(repoRoot, 'docs-site'))).toBe(true);
77
+ expect(fs.existsSync(path.join(repoRoot, 'mkdocs.yml'))).toBe(true);
78
+ expect(fs.existsSync(path.join(repoRoot, '.github/workflows/docs.yml'))).toBe(true);
79
+ });
80
+ it('root workspaces do not reference packages/stacks/*', () => {
81
+ const rootPkg = JSON.parse(fs.readFileSync(path.join(repoRoot, 'package.json'), 'utf8'));
82
+ expect(rootPkg.workspaces ?? []).not.toContain('packages/stacks/*');
83
+ });
84
+ it('no legacy path references in tracked doc/source trees (outside allowlist)', () => {
85
+ const violations = [];
86
+ for (const file of collectScanFiles()) {
87
+ const rel = relPosix(file);
88
+ if (REF_ALLOWLIST.some((re) => re.test(rel)))
89
+ continue;
90
+ if (rel.endsWith('cli-only-invariants.test.ts'))
91
+ continue;
92
+ const content = fs.readFileSync(file, 'utf8');
93
+ if (REF_PATTERN.test(content)) {
94
+ violations.push(rel);
95
+ }
96
+ }
97
+ expect(violations, violations.join('\n')).toEqual([]);
98
+ });
99
+ });
100
+ //# sourceMappingURL=cli-only-invariants.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-only-invariants.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-only-invariants.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli-only-regression.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-only-regression.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli-only-regression.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Regression gates for CLI-only cleanup release (v3.13+).
3
+ */
4
+ import { execFileSync } from 'node:child_process';
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { describe, it, expect } from 'vitest';
9
+ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../..');
10
+ describe('cli-only regression gates', () => {
11
+ it('verify-docs-coverage.mjs exits 0', () => {
12
+ const script = path.join(repoRoot, 'scripts/verify-docs-coverage.mjs');
13
+ expect(fs.existsSync(script)).toBe(true);
14
+ const out = execFileSync(process.execPath, [script], {
15
+ cwd: repoRoot,
16
+ encoding: 'utf8',
17
+ });
18
+ expect(out).toMatch(/Docs cobrem|cover/i);
19
+ });
20
+ it('only packages/cli has a publishable package.json under packages/', () => {
21
+ const packagesDir = path.join(repoRoot, 'packages');
22
+ const children = fs.readdirSync(packagesDir).filter((name) => {
23
+ const pkg = path.join(packagesDir, name, 'package.json');
24
+ return fs.existsSync(pkg);
25
+ });
26
+ expect(children.sort()).toEqual(['cli']);
27
+ });
28
+ });
29
+ //# sourceMappingURL=cli-only-regression.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-only-regression.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-only-regression.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AAE3F,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;YACnD,GAAG,EAAE,QAAQ;YACb,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;YACzD,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dewtech/dare-cli",
3
- "version": "3.12.0",
3
+ "version": "3.13.0",
4
4
  "description": "DARE Framework - CLI, GraphRAG engine, MCP server and shared types in a single package",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",