@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.
- package/dist/__tests__/integration/evidence-contracts.test.d.ts +9 -0
- package/dist/__tests__/integration/evidence-contracts.test.d.ts.map +1 -0
- package/dist/__tests__/integration/evidence-contracts.test.js +203 -0
- package/dist/__tests__/integration/evidence-contracts.test.js.map +1 -0
- package/dist/__tests__/integration/precommit-hook.test.d.ts +12 -0
- package/dist/__tests__/integration/precommit-hook.test.d.ts.map +1 -0
- package/dist/__tests__/integration/precommit-hook.test.js +270 -0
- package/dist/__tests__/integration/precommit-hook.test.js.map +1 -0
- package/dist/__tests__/integration/sync-bundle.test.d.ts +10 -0
- package/dist/__tests__/integration/sync-bundle.test.d.ts.map +1 -0
- package/dist/__tests__/integration/sync-bundle.test.js +241 -0
- package/dist/__tests__/integration/sync-bundle.test.js.map +1 -0
- package/dist/__tests__/integration/vendor-bloat.test.d.ts +12 -0
- package/dist/__tests__/integration/vendor-bloat.test.d.ts.map +1 -0
- package/dist/__tests__/integration/vendor-bloat.test.js +300 -0
- package/dist/__tests__/integration/vendor-bloat.test.js.map +1 -0
- package/dist/commands/adf-evidence.d.ts.map +1 -1
- package/dist/commands/adf-evidence.js +35 -66
- package/dist/commands/adf-evidence.js.map +1 -1
- package/dist/commands/adf-migrate.d.ts +17 -0
- package/dist/commands/adf-migrate.d.ts.map +1 -1
- package/dist/commands/adf-migrate.js +24 -2
- package/dist/commands/adf-migrate.js.map +1 -1
- package/dist/commands/adf-tidy.d.ts +10 -0
- package/dist/commands/adf-tidy.d.ts.map +1 -0
- package/dist/commands/adf-tidy.js +547 -0
- package/dist/commands/adf-tidy.js.map +1 -0
- package/dist/commands/adf.d.ts +9 -3
- package/dist/commands/adf.d.ts.map +1 -1
- package/dist/commands/adf.js +87 -23
- package/dist/commands/adf.js.map +1 -1
- package/dist/commands/bootstrap.d.ts.map +1 -1
- package/dist/commands/bootstrap.js +137 -25
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +98 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +38 -4
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +27 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/serve.d.ts +14 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +253 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +69 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- 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;
|
|
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"}
|