@rengler33/prov 0.1.5 → 0.1.6
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 +70 -9
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +55 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/create.d.ts +83 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +550 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/create.test.d.ts +9 -0
- package/dist/commands/create.test.d.ts.map +1 -0
- package/dist/commands/create.test.js +384 -0
- package/dist/commands/create.test.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for prov create commands.
|
|
3
|
+
*
|
|
4
|
+
* @see spec:declarative-creation:v1
|
|
5
|
+
* @see req:create:spec-basic
|
|
6
|
+
* @see req:create:constraint-basic
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
9
|
+
import { existsSync, rmSync, readFileSync, mkdirSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { tmpdir } from 'node:os';
|
|
12
|
+
import { runSpecCreate, runConstraintCreate } from './create.js';
|
|
13
|
+
import { runInit } from './init.js';
|
|
14
|
+
import { parseYaml } from '../hash.js';
|
|
15
|
+
describe('spec create command', () => {
|
|
16
|
+
let testDir;
|
|
17
|
+
let globalOpts;
|
|
18
|
+
let outputChunks;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
// Create unique temp directory
|
|
21
|
+
testDir = join(tmpdir(), `prov-test-create-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
22
|
+
mkdirSync(testDir, { recursive: true });
|
|
23
|
+
globalOpts = {
|
|
24
|
+
dir: testDir,
|
|
25
|
+
format: 'json',
|
|
26
|
+
};
|
|
27
|
+
// Capture stdout BEFORE runInit to prevent console output
|
|
28
|
+
outputChunks = [];
|
|
29
|
+
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
30
|
+
outputChunks.push(chunk.toString());
|
|
31
|
+
return true;
|
|
32
|
+
});
|
|
33
|
+
// Suppress stderr (warnings)
|
|
34
|
+
vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
35
|
+
// Mock exit to prevent process from actually exiting
|
|
36
|
+
vi.spyOn(process, 'exit').mockImplementation((code) => {
|
|
37
|
+
throw new Error(`process.exit(${code})`);
|
|
38
|
+
});
|
|
39
|
+
// Initialize prov (output captured by mock)
|
|
40
|
+
runInit(globalOpts, {});
|
|
41
|
+
outputChunks = []; // Clear init output
|
|
42
|
+
});
|
|
43
|
+
afterEach(() => {
|
|
44
|
+
vi.restoreAllMocks();
|
|
45
|
+
if (existsSync(testDir)) {
|
|
46
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* @see req:create:spec-basic
|
|
51
|
+
*/
|
|
52
|
+
it('creates a spec with required fields', () => {
|
|
53
|
+
runSpecCreate(globalOpts, {
|
|
54
|
+
name: 'my-feature',
|
|
55
|
+
title: 'My Feature',
|
|
56
|
+
intent: 'A test feature for testing',
|
|
57
|
+
});
|
|
58
|
+
const output = outputChunks.join('');
|
|
59
|
+
const result = JSON.parse(output);
|
|
60
|
+
expect(result.success).toBe(true);
|
|
61
|
+
expect(result.specId).toBe('spec:my-feature:v1');
|
|
62
|
+
expect(result.requirementCount).toBe(0);
|
|
63
|
+
expect(result.outputFile).toContain('my-feature.spec.yaml');
|
|
64
|
+
// Verify file was created
|
|
65
|
+
const specFile = join(testDir, 'spec', 'my-feature.spec.yaml');
|
|
66
|
+
expect(existsSync(specFile)).toBe(true);
|
|
67
|
+
// Verify YAML content
|
|
68
|
+
const content = readFileSync(specFile, 'utf8');
|
|
69
|
+
const parsed = parseYaml(content);
|
|
70
|
+
expect(parsed?.id).toBe('spec:my-feature:v1');
|
|
71
|
+
expect(parsed?.title).toBe('My Feature');
|
|
72
|
+
expect(parsed?.intent).toBe('A test feature for testing');
|
|
73
|
+
expect(parsed?.status).toBe('draft');
|
|
74
|
+
expect(parsed?.version).toBe('1.0.0');
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* @see req:create:spec-requirements
|
|
78
|
+
*/
|
|
79
|
+
it('creates a spec with requirements', () => {
|
|
80
|
+
runSpecCreate(globalOpts, {
|
|
81
|
+
name: 'auth',
|
|
82
|
+
title: 'Authentication',
|
|
83
|
+
intent: 'User authentication',
|
|
84
|
+
req: [
|
|
85
|
+
'login:Users can log in:email works;OAuth works',
|
|
86
|
+
'logout:Users can log out',
|
|
87
|
+
],
|
|
88
|
+
});
|
|
89
|
+
const output = outputChunks.join('');
|
|
90
|
+
const result = JSON.parse(output);
|
|
91
|
+
expect(result.success).toBe(true);
|
|
92
|
+
expect(result.requirementCount).toBe(2);
|
|
93
|
+
// Verify YAML content
|
|
94
|
+
const specFile = join(testDir, 'spec', 'auth.spec.yaml');
|
|
95
|
+
const content = readFileSync(specFile, 'utf8');
|
|
96
|
+
const parsed = parseYaml(content);
|
|
97
|
+
expect(parsed?.requirements).toHaveLength(2);
|
|
98
|
+
expect(parsed?.requirements[0]?.id).toBe('req:auth:login');
|
|
99
|
+
expect(parsed?.requirements[0]?.description).toBe('Users can log in');
|
|
100
|
+
expect(parsed?.requirements[0]?.acceptance).toEqual(['email works', 'OAuth works']);
|
|
101
|
+
expect(parsed?.requirements[1]?.id).toBe('req:auth:logout');
|
|
102
|
+
});
|
|
103
|
+
/**
|
|
104
|
+
* @see req:create:spec-dependencies
|
|
105
|
+
*/
|
|
106
|
+
it('creates a spec with requirement dependencies', () => {
|
|
107
|
+
runSpecCreate(globalOpts, {
|
|
108
|
+
name: 'auth',
|
|
109
|
+
intent: 'User authentication',
|
|
110
|
+
req: [
|
|
111
|
+
'login:Users can log in',
|
|
112
|
+
'logout:Users can log out',
|
|
113
|
+
'session:Manage user session',
|
|
114
|
+
],
|
|
115
|
+
dep: [
|
|
116
|
+
'logout:login',
|
|
117
|
+
'session:login',
|
|
118
|
+
],
|
|
119
|
+
});
|
|
120
|
+
const output = outputChunks.join('');
|
|
121
|
+
const result = JSON.parse(output);
|
|
122
|
+
expect(result.success).toBe(true);
|
|
123
|
+
// Verify dependencies in YAML
|
|
124
|
+
const specFile = join(testDir, 'spec', 'auth.spec.yaml');
|
|
125
|
+
const content = readFileSync(specFile, 'utf8');
|
|
126
|
+
const parsed = parseYaml(content);
|
|
127
|
+
// Find logout and session requirements
|
|
128
|
+
const logout = parsed?.requirements.find(r => r.id === 'req:auth:logout');
|
|
129
|
+
const session = parsed?.requirements.find(r => r.id === 'req:auth:session');
|
|
130
|
+
expect(logout?.depends_on).toEqual(['req:auth:login']);
|
|
131
|
+
expect(session?.depends_on).toEqual(['req:auth:login']);
|
|
132
|
+
});
|
|
133
|
+
/**
|
|
134
|
+
* @see req:create:validation
|
|
135
|
+
*/
|
|
136
|
+
it('validates name format', () => {
|
|
137
|
+
expect(() => {
|
|
138
|
+
runSpecCreate(globalOpts, {
|
|
139
|
+
name: 'Invalid Name',
|
|
140
|
+
intent: 'Test',
|
|
141
|
+
});
|
|
142
|
+
}).toThrow('process.exit(1)');
|
|
143
|
+
const output = outputChunks.join('');
|
|
144
|
+
const result = JSON.parse(output);
|
|
145
|
+
expect(result.success).toBe(false);
|
|
146
|
+
expect(result.error).toContain('Invalid name');
|
|
147
|
+
});
|
|
148
|
+
/**
|
|
149
|
+
* @see req:create:no-overwrite
|
|
150
|
+
*/
|
|
151
|
+
it('prevents overwriting existing files without --force', () => {
|
|
152
|
+
// Create first spec
|
|
153
|
+
runSpecCreate(globalOpts, {
|
|
154
|
+
name: 'existing',
|
|
155
|
+
intent: 'First version',
|
|
156
|
+
});
|
|
157
|
+
outputChunks = [];
|
|
158
|
+
// Try to create again
|
|
159
|
+
expect(() => {
|
|
160
|
+
runSpecCreate(globalOpts, {
|
|
161
|
+
name: 'existing',
|
|
162
|
+
intent: 'Second version',
|
|
163
|
+
});
|
|
164
|
+
}).toThrow('process.exit(1)');
|
|
165
|
+
const output = outputChunks.join('');
|
|
166
|
+
const result = JSON.parse(output);
|
|
167
|
+
expect(result.success).toBe(false);
|
|
168
|
+
expect(result.error).toContain('already exists');
|
|
169
|
+
});
|
|
170
|
+
/**
|
|
171
|
+
* @see req:create:no-overwrite
|
|
172
|
+
*/
|
|
173
|
+
it('allows overwriting with --force', () => {
|
|
174
|
+
// Create first spec
|
|
175
|
+
runSpecCreate(globalOpts, {
|
|
176
|
+
name: 'existing',
|
|
177
|
+
intent: 'First version',
|
|
178
|
+
});
|
|
179
|
+
outputChunks = [];
|
|
180
|
+
// Overwrite with --force
|
|
181
|
+
runSpecCreate(globalOpts, {
|
|
182
|
+
name: 'existing',
|
|
183
|
+
intent: 'Second version',
|
|
184
|
+
force: true,
|
|
185
|
+
});
|
|
186
|
+
const output = outputChunks.join('');
|
|
187
|
+
const result = JSON.parse(output);
|
|
188
|
+
expect(result.success).toBe(true);
|
|
189
|
+
// Verify new content
|
|
190
|
+
const specFile = join(testDir, 'spec', 'existing.spec.yaml');
|
|
191
|
+
const content = readFileSync(specFile, 'utf8');
|
|
192
|
+
const parsed = parseYaml(content);
|
|
193
|
+
expect(parsed?.intent).toBe('Second version');
|
|
194
|
+
});
|
|
195
|
+
/**
|
|
196
|
+
* @see req:create:spec-auto-register
|
|
197
|
+
*/
|
|
198
|
+
it('auto-registers spec in graph by default', async () => {
|
|
199
|
+
runSpecCreate(globalOpts, {
|
|
200
|
+
name: 'registered',
|
|
201
|
+
intent: 'Should be in graph',
|
|
202
|
+
});
|
|
203
|
+
// Verify spec is in graph by listing
|
|
204
|
+
outputChunks = [];
|
|
205
|
+
const { runSpecList } = await import('./spec.js');
|
|
206
|
+
runSpecList(globalOpts, {});
|
|
207
|
+
const output = outputChunks.join('');
|
|
208
|
+
expect(output).toContain('spec:registered:v1');
|
|
209
|
+
});
|
|
210
|
+
/**
|
|
211
|
+
* @see req:create:spec-auto-register
|
|
212
|
+
*/
|
|
213
|
+
it('skips registration with --no-register', () => {
|
|
214
|
+
runSpecCreate(globalOpts, {
|
|
215
|
+
name: 'unregistered',
|
|
216
|
+
intent: 'Should not be in graph',
|
|
217
|
+
noRegister: true,
|
|
218
|
+
});
|
|
219
|
+
const output = outputChunks.join('');
|
|
220
|
+
const result = JSON.parse(output);
|
|
221
|
+
expect(result.success).toBe(true);
|
|
222
|
+
// File should exist
|
|
223
|
+
const specFile = join(testDir, 'spec', 'unregistered.spec.yaml');
|
|
224
|
+
expect(existsSync(specFile)).toBe(true);
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
describe('constraint create command', () => {
|
|
228
|
+
let testDir;
|
|
229
|
+
let globalOpts;
|
|
230
|
+
let outputChunks;
|
|
231
|
+
beforeEach(() => {
|
|
232
|
+
// Create unique temp directory
|
|
233
|
+
testDir = join(tmpdir(), `prov-test-create-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
234
|
+
mkdirSync(testDir, { recursive: true });
|
|
235
|
+
globalOpts = {
|
|
236
|
+
dir: testDir,
|
|
237
|
+
format: 'json',
|
|
238
|
+
};
|
|
239
|
+
// Capture stdout BEFORE runInit to prevent console output
|
|
240
|
+
outputChunks = [];
|
|
241
|
+
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
242
|
+
outputChunks.push(chunk.toString());
|
|
243
|
+
return true;
|
|
244
|
+
});
|
|
245
|
+
// Suppress stderr (warnings)
|
|
246
|
+
vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
247
|
+
// Mock exit to prevent process from actually exiting
|
|
248
|
+
vi.spyOn(process, 'exit').mockImplementation((code) => {
|
|
249
|
+
throw new Error(`process.exit(${code})`);
|
|
250
|
+
});
|
|
251
|
+
// Initialize prov (output captured by mock)
|
|
252
|
+
runInit(globalOpts, {});
|
|
253
|
+
outputChunks = []; // Clear init output
|
|
254
|
+
});
|
|
255
|
+
afterEach(() => {
|
|
256
|
+
vi.restoreAllMocks();
|
|
257
|
+
if (existsSync(testDir)) {
|
|
258
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
/**
|
|
262
|
+
* @see req:create:constraint-basic
|
|
263
|
+
*/
|
|
264
|
+
it('creates a constraint with required fields', () => {
|
|
265
|
+
runConstraintCreate(globalOpts, {
|
|
266
|
+
name: 'security',
|
|
267
|
+
title: 'Security Constraints',
|
|
268
|
+
description: 'Security rules for the codebase',
|
|
269
|
+
});
|
|
270
|
+
const output = outputChunks.join('');
|
|
271
|
+
const result = JSON.parse(output);
|
|
272
|
+
expect(result.success).toBe(true);
|
|
273
|
+
expect(result.constraintId).toBe('constraint:security:v1');
|
|
274
|
+
expect(result.invariantCount).toBe(0);
|
|
275
|
+
expect(result.outputFile).toContain('security.constraints.yaml');
|
|
276
|
+
// Verify file was created
|
|
277
|
+
const constraintFile = join(testDir, 'constraints', 'security.constraints.yaml');
|
|
278
|
+
expect(existsSync(constraintFile)).toBe(true);
|
|
279
|
+
// Verify YAML content
|
|
280
|
+
const content = readFileSync(constraintFile, 'utf8');
|
|
281
|
+
const parsed = parseYaml(content);
|
|
282
|
+
expect(parsed?.id).toBe('constraint:security:v1');
|
|
283
|
+
expect(parsed?.title).toBe('Security Constraints');
|
|
284
|
+
expect(parsed?.description).toBe('Security rules for the codebase');
|
|
285
|
+
expect(parsed?.status).toBe('draft');
|
|
286
|
+
});
|
|
287
|
+
/**
|
|
288
|
+
* @see req:create:constraint-invariants
|
|
289
|
+
*/
|
|
290
|
+
it('creates a constraint with invariants', () => {
|
|
291
|
+
runConstraintCreate(globalOpts, {
|
|
292
|
+
name: 'code-quality',
|
|
293
|
+
title: 'Code Quality',
|
|
294
|
+
description: 'Code quality rules',
|
|
295
|
+
inv: [
|
|
296
|
+
'no-console:No console.log in production:command:grep -r "console.log" src/',
|
|
297
|
+
'lint-pass:Code passes linting:command:npm run lint',
|
|
298
|
+
],
|
|
299
|
+
});
|
|
300
|
+
const output = outputChunks.join('');
|
|
301
|
+
const result = JSON.parse(output);
|
|
302
|
+
expect(result.success).toBe(true);
|
|
303
|
+
expect(result.invariantCount).toBe(2);
|
|
304
|
+
// Verify YAML content
|
|
305
|
+
const constraintFile = join(testDir, 'constraints', 'code-quality.constraints.yaml');
|
|
306
|
+
const content = readFileSync(constraintFile, 'utf8');
|
|
307
|
+
const parsed = parseYaml(content);
|
|
308
|
+
expect(parsed?.invariants).toHaveLength(2);
|
|
309
|
+
expect(parsed?.invariants[0]?.id).toBe('inv:code-quality:no-console');
|
|
310
|
+
expect(parsed?.invariants[0]?.rule).toBe('No console.log in production');
|
|
311
|
+
expect(parsed?.invariants[0]?.verification.type).toBe('command');
|
|
312
|
+
expect(parsed?.invariants[0]?.verification.value).toBe('grep -r "console.log" src/');
|
|
313
|
+
expect(parsed?.invariants[0]?.blocking).toBe(true);
|
|
314
|
+
});
|
|
315
|
+
/**
|
|
316
|
+
* @see req:create:validation
|
|
317
|
+
*/
|
|
318
|
+
it('validates name format', () => {
|
|
319
|
+
expect(() => {
|
|
320
|
+
runConstraintCreate(globalOpts, {
|
|
321
|
+
name: 'Invalid_Name!',
|
|
322
|
+
description: 'Test',
|
|
323
|
+
});
|
|
324
|
+
}).toThrow('process.exit(1)');
|
|
325
|
+
const output = outputChunks.join('');
|
|
326
|
+
const result = JSON.parse(output);
|
|
327
|
+
expect(result.success).toBe(false);
|
|
328
|
+
expect(result.error).toContain('Invalid name');
|
|
329
|
+
});
|
|
330
|
+
/**
|
|
331
|
+
* @see req:create:validation
|
|
332
|
+
*/
|
|
333
|
+
it('validates invariant verification type', () => {
|
|
334
|
+
expect(() => {
|
|
335
|
+
runConstraintCreate(globalOpts, {
|
|
336
|
+
name: 'invalid-type',
|
|
337
|
+
description: 'Test',
|
|
338
|
+
inv: ['test:Test rule:invalid-type:some value'],
|
|
339
|
+
});
|
|
340
|
+
}).toThrow('process.exit(1)');
|
|
341
|
+
const output = outputChunks.join('');
|
|
342
|
+
const result = JSON.parse(output);
|
|
343
|
+
expect(result.success).toBe(false);
|
|
344
|
+
expect(result.error).toContain('Invalid verification type');
|
|
345
|
+
});
|
|
346
|
+
/**
|
|
347
|
+
* @see req:create:no-overwrite
|
|
348
|
+
*/
|
|
349
|
+
it('prevents overwriting existing files without --force', () => {
|
|
350
|
+
// Create first constraint
|
|
351
|
+
runConstraintCreate(globalOpts, {
|
|
352
|
+
name: 'existing',
|
|
353
|
+
description: 'First version',
|
|
354
|
+
});
|
|
355
|
+
outputChunks = [];
|
|
356
|
+
// Try to create again
|
|
357
|
+
expect(() => {
|
|
358
|
+
runConstraintCreate(globalOpts, {
|
|
359
|
+
name: 'existing',
|
|
360
|
+
description: 'Second version',
|
|
361
|
+
});
|
|
362
|
+
}).toThrow('process.exit(1)');
|
|
363
|
+
const output = outputChunks.join('');
|
|
364
|
+
const result = JSON.parse(output);
|
|
365
|
+
expect(result.success).toBe(false);
|
|
366
|
+
expect(result.error).toContain('already exists');
|
|
367
|
+
});
|
|
368
|
+
/**
|
|
369
|
+
* @see req:create:constraint-auto-register
|
|
370
|
+
*/
|
|
371
|
+
it('auto-registers constraint in graph by default', async () => {
|
|
372
|
+
runConstraintCreate(globalOpts, {
|
|
373
|
+
name: 'registered',
|
|
374
|
+
description: 'Should be in graph',
|
|
375
|
+
});
|
|
376
|
+
// Verify constraint is in graph by listing
|
|
377
|
+
outputChunks = [];
|
|
378
|
+
const { runConstraintList } = await import('./constraint.js');
|
|
379
|
+
runConstraintList(globalOpts, {});
|
|
380
|
+
const output = outputChunks.join('');
|
|
381
|
+
expect(output).toContain('constraint:registered:v1');
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
//# sourceMappingURL=create.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.test.js","sourceRoot":"","sources":["../../src/commands/create.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rengler33/prov",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Provenance-first planning CLI for AI agent workflows",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"build": "tsc",
|
|
15
15
|
"build:bun": "bun build ./src/cli.ts --compile --outfile ./bin/prov",
|
|
16
16
|
"dev": "tsc --watch",
|
|
17
|
-
"test": "vitest",
|
|
18
|
-
"
|
|
17
|
+
"test": "vitest run",
|
|
18
|
+
"testwatch": "vitest",
|
|
19
19
|
"lint": "eslint src --ext .ts",
|
|
20
20
|
"lint:fix": "eslint src --ext .ts --fix",
|
|
21
21
|
"typecheck": "tsc --noEmit",
|