@stackbilt/cli 0.5.0 → 0.7.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 (55) hide show
  1. package/dist/__tests__/integration/evidence-contracts.test.d.ts +9 -0
  2. package/dist/__tests__/integration/evidence-contracts.test.d.ts.map +1 -0
  3. package/dist/__tests__/integration/evidence-contracts.test.js +203 -0
  4. package/dist/__tests__/integration/evidence-contracts.test.js.map +1 -0
  5. package/dist/__tests__/integration/precommit-hook.test.d.ts +12 -0
  6. package/dist/__tests__/integration/precommit-hook.test.d.ts.map +1 -0
  7. package/dist/__tests__/integration/precommit-hook.test.js +270 -0
  8. package/dist/__tests__/integration/precommit-hook.test.js.map +1 -0
  9. package/dist/__tests__/integration/sync-bundle.test.d.ts +10 -0
  10. package/dist/__tests__/integration/sync-bundle.test.d.ts.map +1 -0
  11. package/dist/__tests__/integration/sync-bundle.test.js +241 -0
  12. package/dist/__tests__/integration/sync-bundle.test.js.map +1 -0
  13. package/dist/__tests__/integration/vendor-bloat.test.d.ts +12 -0
  14. package/dist/__tests__/integration/vendor-bloat.test.d.ts.map +1 -0
  15. package/dist/__tests__/integration/vendor-bloat.test.js +300 -0
  16. package/dist/__tests__/integration/vendor-bloat.test.js.map +1 -0
  17. package/dist/commands/adf-evidence.d.ts.map +1 -1
  18. package/dist/commands/adf-evidence.js +35 -66
  19. package/dist/commands/adf-evidence.js.map +1 -1
  20. package/dist/commands/adf-migrate.d.ts +17 -0
  21. package/dist/commands/adf-migrate.d.ts.map +1 -1
  22. package/dist/commands/adf-migrate.js +24 -2
  23. package/dist/commands/adf-migrate.js.map +1 -1
  24. package/dist/commands/adf-tidy.d.ts +10 -0
  25. package/dist/commands/adf-tidy.d.ts.map +1 -0
  26. package/dist/commands/adf-tidy.js +547 -0
  27. package/dist/commands/adf-tidy.js.map +1 -0
  28. package/dist/commands/adf.d.ts +9 -3
  29. package/dist/commands/adf.d.ts.map +1 -1
  30. package/dist/commands/adf.js +87 -23
  31. package/dist/commands/adf.js.map +1 -1
  32. package/dist/commands/bootstrap.d.ts.map +1 -1
  33. package/dist/commands/bootstrap.js +137 -25
  34. package/dist/commands/bootstrap.js.map +1 -1
  35. package/dist/commands/doctor.d.ts.map +1 -1
  36. package/dist/commands/doctor.js +98 -1
  37. package/dist/commands/doctor.js.map +1 -1
  38. package/dist/commands/hook.d.ts.map +1 -1
  39. package/dist/commands/hook.js +38 -4
  40. package/dist/commands/hook.js.map +1 -1
  41. package/dist/commands/init.d.ts +1 -1
  42. package/dist/commands/init.d.ts.map +1 -1
  43. package/dist/commands/init.js +27 -1
  44. package/dist/commands/init.js.map +1 -1
  45. package/dist/commands/serve.d.ts +14 -0
  46. package/dist/commands/serve.d.ts.map +1 -0
  47. package/dist/commands/serve.js +253 -0
  48. package/dist/commands/serve.js.map +1 -0
  49. package/dist/commands/setup.d.ts.map +1 -1
  50. package/dist/commands/setup.js +69 -2
  51. package/dist/commands/setup.js.map +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +6 -0
  54. package/dist/index.js.map +1 -1
  55. package/package.json +9 -8
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ /**
3
+ * Integration tests: sync drift + bundle missing-module + stability rerun
4
+ *
5
+ * v2 scenarios covering:
6
+ * - adf sync --check exit contract (drift detection)
7
+ * - bundle missing default module (hard fail) vs on-demand (soft warning)
8
+ * - stability rerun (same scenario twice, normalized JSON must match)
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ const fs = __importStar(require("node:fs"));
45
+ const os = __importStar(require("node:os"));
46
+ const path = __importStar(require("node:path"));
47
+ const vitest_1 = require("vitest");
48
+ const index_1 = require("../../index");
49
+ const adf_sync_1 = require("../../commands/adf-sync");
50
+ const adf_bundle_1 = require("../../commands/adf-bundle");
51
+ // ============================================================================
52
+ // Fixture Helpers
53
+ // ============================================================================
54
+ const originalCwd = process.cwd();
55
+ const tempDirs = [];
56
+ function makeTempDir(label) {
57
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), `charter-integ-sb-${label}-`));
58
+ tempDirs.push(tmp);
59
+ return tmp;
60
+ }
61
+ const jsonOptions = {
62
+ configPath: '.charter',
63
+ format: 'json',
64
+ ciMode: false,
65
+ yes: false,
66
+ };
67
+ /** Write a minimal ADF repo with SYNC entries */
68
+ function writeSyncFixture(tmp) {
69
+ fs.mkdirSync(path.join(tmp, '.ai'), { recursive: true });
70
+ fs.writeFileSync(path.join(tmp, '.ai', 'manifest.adf'), `ADF: 0.1
71
+
72
+ 📦 DEFAULT_LOAD:
73
+ - core.adf
74
+ - state.adf
75
+
76
+ 🔄 SYNC:
77
+ - core.adf -> CLAUDE.md
78
+ `);
79
+ fs.writeFileSync(path.join(tmp, '.ai', 'core.adf'), `ADF: 0.1
80
+
81
+ 📐 RULES:
82
+ - All changes require tests
83
+ `);
84
+ fs.writeFileSync(path.join(tmp, '.ai', 'state.adf'), 'ADF: 0.1\n\n📋 STATE:\n - CURRENT: testing\n');
85
+ }
86
+ /** Write a bundle fixture with on-demand modules */
87
+ function writeBundleFixture(tmp, opts = {}) {
88
+ fs.mkdirSync(path.join(tmp, '.ai'), { recursive: true });
89
+ fs.writeFileSync(path.join(tmp, '.ai', 'manifest.adf'), `ADF: 0.1
90
+
91
+ 📦 DEFAULT_LOAD:
92
+ - core.adf
93
+ - state.adf
94
+
95
+ 📂 ON_DEMAND:
96
+ - backend.adf (Triggers on: database, API, migration)
97
+
98
+ 💰 BUDGET:
99
+ MAX_TOKENS: 4000
100
+ `);
101
+ fs.writeFileSync(path.join(tmp, '.ai', 'core.adf'), `ADF: 0.1
102
+
103
+ 📐 RULES:
104
+ - All changes require tests
105
+ `);
106
+ fs.writeFileSync(path.join(tmp, '.ai', 'state.adf'), 'ADF: 0.1\n\n📋 STATE:\n - CURRENT: testing\n');
107
+ if (opts.includeOnDemandFile) {
108
+ fs.writeFileSync(path.join(tmp, '.ai', 'backend.adf'), `ADF: 0.1
109
+
110
+ 📐 RULES:
111
+ - Database access through repository pattern
112
+ `);
113
+ }
114
+ }
115
+ /** Capture console.log output during a synchronous command */
116
+ function captureJson(fn, options, args) {
117
+ const logs = [];
118
+ const spy = vitest_1.vi.spyOn(console, 'log').mockImplementation((...msgs) => {
119
+ logs.push(msgs.map(String).join(' '));
120
+ });
121
+ let exitCode;
122
+ try {
123
+ exitCode = fn(options, args);
124
+ }
125
+ finally {
126
+ spy.mockRestore();
127
+ }
128
+ const raw = logs.join('\n').trim();
129
+ return { exitCode, output: JSON.parse(raw) };
130
+ }
131
+ // ============================================================================
132
+ // Lifecycle
133
+ // ============================================================================
134
+ (0, vitest_1.afterEach)(() => {
135
+ process.chdir(originalCwd);
136
+ while (tempDirs.length > 0) {
137
+ const dir = tempDirs.pop();
138
+ if (dir)
139
+ fs.rmSync(dir, { recursive: true, force: true });
140
+ }
141
+ vitest_1.vi.restoreAllMocks();
142
+ });
143
+ // ============================================================================
144
+ // Sync Drift
145
+ // ============================================================================
146
+ (0, vitest_1.describe)('adf sync --check contracts (integration)', () => {
147
+ (0, vitest_1.it)('exits 0 when sources match lock file', () => {
148
+ const tmp = makeTempDir('sync-ok');
149
+ process.chdir(tmp);
150
+ writeSyncFixture(tmp);
151
+ // Write lock first
152
+ captureJson(adf_sync_1.adfSync, jsonOptions, ['--write']);
153
+ // Check should pass
154
+ const { exitCode, output } = captureJson(adf_sync_1.adfSync, jsonOptions, ['--check']);
155
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.SUCCESS);
156
+ (0, vitest_1.expect)(output.allInSync).toBe(true);
157
+ });
158
+ (0, vitest_1.it)('exits 1 when source has drifted since lock was written', () => {
159
+ const tmp = makeTempDir('sync-drift');
160
+ process.chdir(tmp);
161
+ writeSyncFixture(tmp);
162
+ // Write lock
163
+ captureJson(adf_sync_1.adfSync, jsonOptions, ['--write']);
164
+ // Mutate source after lock
165
+ const corePath = path.join(tmp, '.ai', 'core.adf');
166
+ fs.appendFileSync(corePath, '\n - New rule added after lock\n');
167
+ // Check should fail
168
+ const { exitCode, output } = captureJson(adf_sync_1.adfSync, jsonOptions, ['--check']);
169
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.POLICY_VIOLATION);
170
+ (0, vitest_1.expect)(output.allInSync).toBe(false);
171
+ (0, vitest_1.expect)(output.nextActions).toBeDefined();
172
+ (0, vitest_1.expect)(output.nextActions).toContain('charter adf sync --write');
173
+ });
174
+ (0, vitest_1.it)('exits 1 when no lock file exists (first-time check)', () => {
175
+ const tmp = makeTempDir('sync-no-lock');
176
+ process.chdir(tmp);
177
+ writeSyncFixture(tmp);
178
+ // Don't write lock — jump straight to check
179
+ const { exitCode, output } = captureJson(adf_sync_1.adfSync, jsonOptions, ['--check']);
180
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.POLICY_VIOLATION);
181
+ (0, vitest_1.expect)(output.allInSync).toBe(false);
182
+ });
183
+ });
184
+ // ============================================================================
185
+ // Bundle Missing Modules
186
+ // ============================================================================
187
+ (0, vitest_1.describe)('adf bundle missing-module contracts (integration)', () => {
188
+ (0, vitest_1.it)('throws CLIError for missing default-load module', () => {
189
+ const tmp = makeTempDir('bundle-default');
190
+ process.chdir(tmp);
191
+ writeBundleFixture(tmp);
192
+ // Delete state.adf (a default-load module)
193
+ fs.unlinkSync(path.join(tmp, '.ai', 'state.adf'));
194
+ // Should throw — default modules are hard requirements
195
+ (0, vitest_1.expect)(() => {
196
+ (0, adf_bundle_1.adfBundle)(jsonOptions, ['--task', 'test something']);
197
+ }).toThrow(/Default module not found|state\.adf/);
198
+ });
199
+ (0, vitest_1.it)('returns soft warning for missing on-demand module', () => {
200
+ const tmp = makeTempDir('bundle-ondemand');
201
+ process.chdir(tmp);
202
+ writeBundleFixture(tmp, { includeOnDemandFile: false });
203
+ // Task triggers backend.adf via "database" keyword, but file is missing
204
+ const { exitCode, output } = captureJson(adf_bundle_1.adfBundle, jsonOptions, ['--task', 'fix database migration']);
205
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.SUCCESS); // not a hard fail
206
+ (0, vitest_1.expect)(output.missingModules).toBeDefined();
207
+ const missing = output.missingModules;
208
+ (0, vitest_1.expect)(missing.some(m => m.module === 'backend.adf')).toBe(true);
209
+ (0, vitest_1.expect)(missing[0].loadPolicy).toBe('ON_DEMAND');
210
+ });
211
+ (0, vitest_1.it)('includes on-demand module when present and triggered', () => {
212
+ const tmp = makeTempDir('bundle-triggered');
213
+ process.chdir(tmp);
214
+ writeBundleFixture(tmp, { includeOnDemandFile: true });
215
+ const { exitCode, output } = captureJson(adf_bundle_1.adfBundle, jsonOptions, ['--task', 'fix database migration']);
216
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.SUCCESS);
217
+ (0, vitest_1.expect)(output.resolvedModules).toBeDefined();
218
+ (0, vitest_1.expect)(output.resolvedModules).toContain('backend.adf');
219
+ (0, vitest_1.expect)(output.missingModules).toBeUndefined();
220
+ });
221
+ });
222
+ // ============================================================================
223
+ // Stability Rerun
224
+ // ============================================================================
225
+ (0, vitest_1.describe)('stability rerun (integration)', () => {
226
+ (0, vitest_1.it)('produces structurally identical JSON across two consecutive runs', () => {
227
+ const tmp = makeTempDir('stability');
228
+ process.chdir(tmp);
229
+ writeBundleFixture(tmp, { includeOnDemandFile: true });
230
+ const run1 = captureJson(adf_bundle_1.adfBundle, jsonOptions, ['--task', 'fix database migration']);
231
+ const run2 = captureJson(adf_bundle_1.adfBundle, jsonOptions, ['--task', 'fix database migration']);
232
+ (0, vitest_1.expect)(run1.exitCode).toBe(run2.exitCode);
233
+ // Normalize: remove fields that might vary (none expected, but defensive)
234
+ const normalize = (o) => {
235
+ const { ...rest } = o;
236
+ return rest;
237
+ };
238
+ (0, vitest_1.expect)(normalize(run1.output)).toEqual(normalize(run2.output));
239
+ });
240
+ });
241
+ //# sourceMappingURL=sync-bundle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-bundle.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/sync-bundle.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Integration tests: vendor file bloat pipeline
3
+ *
4
+ * Exercises the cross-command lifecycle:
5
+ * doctor (detect) → adf tidy (extract) → doctor (verify recovery)
6
+ *
7
+ * Each test spins up a disposable temp repo with a minimal ADF scaffold,
8
+ * invokes commands through the same function entry points as the CLI,
9
+ * and asserts JSON output fields + exit codes.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=vendor-bloat.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor-bloat.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/vendor-bloat.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ /**
3
+ * Integration tests: vendor file bloat pipeline
4
+ *
5
+ * Exercises the cross-command lifecycle:
6
+ * doctor (detect) → adf tidy (extract) → doctor (verify recovery)
7
+ *
8
+ * Each test spins up a disposable temp repo with a minimal ADF scaffold,
9
+ * invokes commands through the same function entry points as the CLI,
10
+ * and asserts JSON output fields + exit codes.
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ const fs = __importStar(require("node:fs"));
47
+ const os = __importStar(require("node:os"));
48
+ const path = __importStar(require("node:path"));
49
+ const node_child_process_1 = require("node:child_process");
50
+ const vitest_1 = require("vitest");
51
+ const index_1 = require("../../index");
52
+ const doctor_1 = require("../../commands/doctor");
53
+ const adf_tidy_1 = require("../../commands/adf-tidy");
54
+ // ============================================================================
55
+ // Fixture Helpers
56
+ // ============================================================================
57
+ const originalCwd = process.cwd();
58
+ const tempDirs = [];
59
+ function makeTempDir(label) {
60
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), `charter-integ-${label}-`));
61
+ tempDirs.push(tmp);
62
+ return tmp;
63
+ }
64
+ const jsonOptions = {
65
+ configPath: '.charter',
66
+ format: 'json',
67
+ ciMode: false,
68
+ yes: false,
69
+ };
70
+ const ciOptions = {
71
+ ...jsonOptions,
72
+ ciMode: true,
73
+ };
74
+ /**
75
+ * Scaffold a minimal ADF repo with manifest, core module, state module,
76
+ * and a clean thin-pointer CLAUDE.md.
77
+ */
78
+ function writeFixtureRepo(tmp) {
79
+ fs.mkdirSync(path.join(tmp, '.ai'), { recursive: true });
80
+ fs.mkdirSync(path.join(tmp, '.charter'), { recursive: true });
81
+ fs.writeFileSync(path.join(tmp, '.ai', 'manifest.adf'), `ADF: 0.1
82
+
83
+ 📐 RULES:
84
+ - Test manifest
85
+
86
+ 📦 DEFAULT_LOAD:
87
+ - core.adf
88
+ - state.adf
89
+
90
+ 📂 ON_DEMAND:
91
+ - backend.adf (Triggers on: database, API, migration, schema)
92
+ - frontend.adf (Triggers on: component, React, CSS, layout)
93
+
94
+ 💰 BUDGET:
95
+ MAX_TOKENS: 4000
96
+ `);
97
+ fs.writeFileSync(path.join(tmp, '.ai', 'core.adf'), `ADF: 0.1
98
+
99
+ 📁 STRUCTURE:
100
+ - src/ — source code
101
+
102
+ 📐 CONSTRAINTS: [load-bearing]
103
+ - All changes require tests
104
+ `);
105
+ fs.writeFileSync(path.join(tmp, '.ai', 'state.adf'), `ADF: 0.1
106
+
107
+ 📋 STATE:
108
+ - CURRENT: testing
109
+ `);
110
+ // On-demand module stubs (so doctor doesn't warn about missing modules)
111
+ fs.writeFileSync(path.join(tmp, '.ai', 'backend.adf'), `ADF: 0.1
112
+
113
+ 📐 RULES:
114
+ - Database access goes through repository layer
115
+ `);
116
+ fs.writeFileSync(path.join(tmp, '.ai', 'frontend.adf'), `ADF: 0.1
117
+
118
+ 📐 RULES:
119
+ - Components use .tsx extension
120
+ `);
121
+ // Init git repo so doctor's git check passes
122
+ (0, node_child_process_1.execFileSync)('git', ['init'], { cwd: tmp, stdio: 'ignore' });
123
+ }
124
+ /** Write a clean thin-pointer CLAUDE.md */
125
+ function writeCleanPointer(tmp) {
126
+ fs.writeFileSync(path.join(tmp, 'CLAUDE.md'), `# CLAUDE.md
127
+
128
+ > **DO NOT add rules, constraints, or context to this file.**
129
+ > This file is auto-managed by Charter. All project rules live in \`.ai/\`.
130
+ > New rules should be added to the appropriate \`.ai/*.adf\` module.
131
+ > See \`.ai/manifest.adf\` for the module routing manifest.
132
+
133
+ ## Environment
134
+ - Node 20
135
+ - pnpm 9
136
+ `);
137
+ }
138
+ /**
139
+ * Write a bloated CLAUDE.md: thin pointer + extra sections with
140
+ * architecture rules, trigger-heavy content, and non-Environment H2s.
141
+ */
142
+ function writeBloatedPointer(tmp) {
143
+ fs.writeFileSync(path.join(tmp, 'CLAUDE.md'), `# CLAUDE.md
144
+
145
+ > **DO NOT add rules, constraints, or context to this file.**
146
+ > This file is auto-managed by Charter. All project rules live in \`.ai/\`.
147
+ > New rules should be added to the appropriate \`.ai/*.adf\` module.
148
+ > See \`.ai/manifest.adf\` for the module routing manifest.
149
+
150
+ ## Environment
151
+ - Node 20
152
+ - pnpm 9
153
+
154
+ ## Architecture
155
+ - The project uses a layered architecture pattern
156
+ - All database queries go through the repository layer
157
+ - API endpoints must validate input before processing
158
+
159
+ ## Build Commands
160
+ - Run \`pnpm build\` for production
161
+ - Run \`pnpm test\` for the test suite
162
+
163
+ ## Database Rules
164
+ - All database migrations must be reversible
165
+ - Schema changes require migration scripts
166
+ - Database connections use connection pooling
167
+ - API rate limiting applies to all database endpoints
168
+
169
+ ## Frontend Standards
170
+ - All React component files use .tsx extension
171
+ - CSS modules for component-scoped styles
172
+ - Layout components handle responsive breakpoints
173
+ `);
174
+ }
175
+ /** Capture console.log output during a command invocation */
176
+ async function captureJson(fn, options, args) {
177
+ const logs = [];
178
+ const spy = vitest_1.vi.spyOn(console, 'log').mockImplementation((...msgs) => {
179
+ logs.push(msgs.map(String).join(' '));
180
+ });
181
+ let exitCode;
182
+ try {
183
+ exitCode = await fn(options, args);
184
+ }
185
+ finally {
186
+ spy.mockRestore();
187
+ }
188
+ const raw = logs.join('\n').trim();
189
+ let output;
190
+ try {
191
+ output = JSON.parse(raw);
192
+ }
193
+ catch {
194
+ output = raw;
195
+ }
196
+ return { exitCode, output };
197
+ }
198
+ // ============================================================================
199
+ // Lifecycle
200
+ // ============================================================================
201
+ (0, vitest_1.afterEach)(() => {
202
+ process.chdir(originalCwd);
203
+ while (tempDirs.length > 0) {
204
+ const dir = tempDirs.pop();
205
+ if (dir)
206
+ fs.rmSync(dir, { recursive: true, force: true });
207
+ }
208
+ vitest_1.vi.restoreAllMocks();
209
+ });
210
+ // ============================================================================
211
+ // v1 Scenario Set
212
+ // ============================================================================
213
+ (0, vitest_1.describe)('vendor bloat pipeline (integration)', () => {
214
+ // ── Scenario 1: Clean pointer baseline ──────────────────────────────────
215
+ (0, vitest_1.it)('doctor reports no vendor bloat warning for a clean thin pointer', async () => {
216
+ const tmp = makeTempDir('clean');
217
+ process.chdir(tmp);
218
+ writeFixtureRepo(tmp);
219
+ writeCleanPointer(tmp);
220
+ const { exitCode, output } = await captureJson(doctor_1.doctorCommand, jsonOptions, ['--adf-only']);
221
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.SUCCESS);
222
+ const result = output;
223
+ const bloatCheck = result.checks.find(c => c.name === 'adf vendor bloat');
224
+ (0, vitest_1.expect)(bloatCheck).toBeDefined();
225
+ (0, vitest_1.expect)(bloatCheck.status).toBe('PASS');
226
+ });
227
+ // ── Scenario 2: Bloat detected ──────────────────────────────────────────
228
+ (0, vitest_1.it)('doctor detects vendor bloat with section overlap and trigger keywords', async () => {
229
+ const tmp = makeTempDir('bloat');
230
+ process.chdir(tmp);
231
+ writeFixtureRepo(tmp);
232
+ writeBloatedPointer(tmp);
233
+ const { exitCode, output } = await captureJson(doctor_1.doctorCommand, jsonOptions, ['--adf-only']);
234
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.SUCCESS); // non-CI mode returns 0
235
+ const result = output;
236
+ const bloatCheck = result.checks.find(c => c.name === 'adf vendor bloat');
237
+ (0, vitest_1.expect)(bloatCheck).toBeDefined();
238
+ (0, vitest_1.expect)(bloatCheck.status).toBe('WARN');
239
+ (0, vitest_1.expect)(bloatCheck.details).toContain('CLAUDE.md');
240
+ // Should detect trigger keywords from ON_DEMAND entries
241
+ (0, vitest_1.expect)(bloatCheck.details).toMatch(/database|API|component|React|CSS/i);
242
+ });
243
+ // ── Scenario 3: CI gate returns exit 1 on bloat ─────────────────────────
244
+ (0, vitest_1.it)('doctor --ci returns exit 1 when vendor bloat is detected', async () => {
245
+ const tmp = makeTempDir('ci-gate');
246
+ process.chdir(tmp);
247
+ writeFixtureRepo(tmp);
248
+ writeBloatedPointer(tmp);
249
+ const { exitCode } = await captureJson(doctor_1.doctorCommand, ciOptions, ['--adf-only']);
250
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.POLICY_VIOLATION);
251
+ });
252
+ // ── Scenario 4: Tidy dry-run contract ───────────────────────────────────
253
+ (0, vitest_1.it)('adf tidy --dry-run --ci reports extraction count and returns exit 1', async () => {
254
+ const tmp = makeTempDir('tidy-dry');
255
+ process.chdir(tmp);
256
+ writeFixtureRepo(tmp);
257
+ writeBloatedPointer(tmp);
258
+ const { exitCode, output } = await captureJson(adf_tidy_1.adfTidyCommand, jsonOptions, ['--dry-run', '--ci']);
259
+ (0, vitest_1.expect)(exitCode).toBe(index_1.EXIT_CODE.POLICY_VIOLATION);
260
+ const result = output;
261
+ (0, vitest_1.expect)(result.dryRun).toBe(true);
262
+ (0, vitest_1.expect)(result.totalExtracted).toBeGreaterThan(0);
263
+ (0, vitest_1.expect)(result.files).toHaveLength(1); // only CLAUDE.md exists
264
+ (0, vitest_1.expect)(result.modulesModified.length).toBeGreaterThan(0);
265
+ });
266
+ // ── Scenario 5: Recovery loop ───────────────────────────────────────────
267
+ (0, vitest_1.it)('after adf tidy apply, doctor reports vendor bloat as PASS', async () => {
268
+ const tmp = makeTempDir('recovery');
269
+ process.chdir(tmp);
270
+ writeFixtureRepo(tmp);
271
+ writeBloatedPointer(tmp);
272
+ // Step 1: Confirm bloat exists
273
+ const before = await captureJson(doctor_1.doctorCommand, ciOptions, ['--adf-only']);
274
+ (0, vitest_1.expect)(before.exitCode).toBe(index_1.EXIT_CODE.POLICY_VIOLATION);
275
+ // Step 2: Apply tidy (not dry-run)
276
+ const tidy = await captureJson(adf_tidy_1.adfTidyCommand, jsonOptions, []);
277
+ const tidyResult = tidy.output;
278
+ (0, vitest_1.expect)(tidyResult.totalExtracted).toBeGreaterThan(0);
279
+ // Step 3: Verify recovery — doctor should pass now
280
+ const after = await captureJson(doctor_1.doctorCommand, ciOptions, ['--adf-only']);
281
+ (0, vitest_1.expect)(after.exitCode).toBe(index_1.EXIT_CODE.SUCCESS);
282
+ const result = after.output;
283
+ const bloatCheck = result.checks.find(c => c.name === 'adf vendor bloat');
284
+ (0, vitest_1.expect)(bloatCheck).toBeDefined();
285
+ (0, vitest_1.expect)(bloatCheck.status).toBe('PASS');
286
+ // Step 4: Verify ADF modules were written
287
+ const aiFiles = fs.readdirSync(path.join(tmp, '.ai'));
288
+ const newModules = aiFiles.filter(f => f.endsWith('.adf') && !['manifest.adf', 'core.adf', 'state.adf'].includes(f));
289
+ (0, vitest_1.expect)(newModules.length).toBeGreaterThanOrEqual(0); // may route to core.adf instead of new files
290
+ // Step 5: Verify CLAUDE.md was restored to thin pointer
291
+ const claudeContent = fs.readFileSync(path.join(tmp, 'CLAUDE.md'), 'utf-8');
292
+ (0, vitest_1.expect)(claudeContent).toContain('DO NOT add rules');
293
+ (0, vitest_1.expect)(claudeContent).not.toContain('## Architecture');
294
+ (0, vitest_1.expect)(claudeContent).not.toContain('## Database Rules');
295
+ (0, vitest_1.expect)(claudeContent).not.toContain('## Frontend Standards');
296
+ // Environment should be preserved
297
+ (0, vitest_1.expect)(claudeContent).toContain('## Environment');
298
+ });
299
+ });
300
+ //# sourceMappingURL=vendor-bloat.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor-bloat.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/vendor-bloat.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"adf-evidence.d.ts","sourceRoot":"","sources":["../../src/commands/adf-evidence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAsB3C,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAyOvE"}
1
+ {"version":3,"file":"adf-evidence.d.ts","sourceRoot":"","sources":["../../src/commands/adf-evidence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAY3C,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAwOvE"}