@blockspool/core 0.3.0 → 0.3.1

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 (145) hide show
  1. package/package.json +1 -1
  2. package/dist/db/adapter.d.ts +0 -191
  3. package/dist/db/adapter.d.ts.map +0 -1
  4. package/dist/db/adapter.js +0 -40
  5. package/dist/db/adapter.js.map +0 -1
  6. package/dist/db/contract.d.ts +0 -47
  7. package/dist/db/contract.d.ts.map +0 -1
  8. package/dist/db/contract.js +0 -258
  9. package/dist/db/contract.js.map +0 -1
  10. package/dist/db/index.d.ts +0 -6
  11. package/dist/db/index.d.ts.map +0 -1
  12. package/dist/db/index.js +0 -7
  13. package/dist/db/index.js.map +0 -1
  14. package/dist/exec/index.d.ts +0 -5
  15. package/dist/exec/index.d.ts.map +0 -1
  16. package/dist/exec/index.js +0 -5
  17. package/dist/exec/index.js.map +0 -1
  18. package/dist/exec/types.d.ts +0 -64
  19. package/dist/exec/types.d.ts.map +0 -1
  20. package/dist/exec/types.js +0 -8
  21. package/dist/exec/types.js.map +0 -1
  22. package/dist/index.d.ts +0 -23
  23. package/dist/index.d.ts.map +0 -1
  24. package/dist/index.js +0 -27
  25. package/dist/index.js.map +0 -1
  26. package/dist/repos/index.d.ts +0 -15
  27. package/dist/repos/index.d.ts.map +0 -1
  28. package/dist/repos/index.js +0 -11
  29. package/dist/repos/index.js.map +0 -1
  30. package/dist/repos/projects.d.ts +0 -41
  31. package/dist/repos/projects.d.ts.map +0 -1
  32. package/dist/repos/projects.js +0 -74
  33. package/dist/repos/projects.js.map +0 -1
  34. package/dist/repos/run_steps.d.ts +0 -152
  35. package/dist/repos/run_steps.d.ts.map +0 -1
  36. package/dist/repos/run_steps.js +0 -321
  37. package/dist/repos/run_steps.js.map +0 -1
  38. package/dist/repos/runs.d.ts +0 -92
  39. package/dist/repos/runs.d.ts.map +0 -1
  40. package/dist/repos/runs.js +0 -177
  41. package/dist/repos/runs.js.map +0 -1
  42. package/dist/repos/tickets.d.ts +0 -71
  43. package/dist/repos/tickets.d.ts.map +0 -1
  44. package/dist/repos/tickets.js +0 -128
  45. package/dist/repos/tickets.js.map +0 -1
  46. package/dist/scout/index.d.ts +0 -15
  47. package/dist/scout/index.d.ts.map +0 -1
  48. package/dist/scout/index.js +0 -382
  49. package/dist/scout/index.js.map +0 -1
  50. package/dist/scout/prompt.d.ts +0 -30
  51. package/dist/scout/prompt.d.ts.map +0 -1
  52. package/dist/scout/prompt.js +0 -101
  53. package/dist/scout/prompt.js.map +0 -1
  54. package/dist/scout/runner.d.ts +0 -68
  55. package/dist/scout/runner.d.ts.map +0 -1
  56. package/dist/scout/runner.js +0 -241
  57. package/dist/scout/runner.js.map +0 -1
  58. package/dist/scout/scanner.d.ts +0 -35
  59. package/dist/scout/scanner.d.ts.map +0 -1
  60. package/dist/scout/scanner.js +0 -164
  61. package/dist/scout/scanner.js.map +0 -1
  62. package/dist/scout/types.d.ts +0 -177
  63. package/dist/scout/types.d.ts.map +0 -1
  64. package/dist/scout/types.js +0 -44
  65. package/dist/scout/types.js.map +0 -1
  66. package/dist/services/index.d.ts +0 -10
  67. package/dist/services/index.d.ts.map +0 -1
  68. package/dist/services/index.js +0 -9
  69. package/dist/services/index.js.map +0 -1
  70. package/dist/services/qa.d.ts +0 -76
  71. package/dist/services/qa.d.ts.map +0 -1
  72. package/dist/services/qa.js +0 -239
  73. package/dist/services/qa.js.map +0 -1
  74. package/dist/services/scout.d.ts +0 -118
  75. package/dist/services/scout.d.ts.map +0 -1
  76. package/dist/services/scout.js +0 -204
  77. package/dist/services/scout.js.map +0 -1
  78. package/dist/test/db-contract-sqlite.test.d.ts +0 -2
  79. package/dist/test/db-contract-sqlite.test.d.ts.map +0 -1
  80. package/dist/test/db-contract-sqlite.test.js +0 -176
  81. package/dist/test/db-contract-sqlite.test.js.map +0 -1
  82. package/dist/test/learnings-format.test.d.ts +0 -9
  83. package/dist/test/learnings-format.test.d.ts.map +0 -1
  84. package/dist/test/learnings-format.test.js +0 -174
  85. package/dist/test/learnings-format.test.js.map +0 -1
  86. package/dist/test/repos-integration.test.d.ts +0 -2
  87. package/dist/test/repos-integration.test.d.ts.map +0 -1
  88. package/dist/test/repos-integration.test.js +0 -565
  89. package/dist/test/repos-integration.test.js.map +0 -1
  90. package/dist/test/scout-full-pure.test.d.ts +0 -2
  91. package/dist/test/scout-full-pure.test.d.ts.map +0 -1
  92. package/dist/test/scout-full-pure.test.js +0 -122
  93. package/dist/test/scout-full-pure.test.js.map +0 -1
  94. package/dist/test/scout-integration.test.d.ts +0 -13
  95. package/dist/test/scout-integration.test.d.ts.map +0 -1
  96. package/dist/test/scout-integration.test.js +0 -229
  97. package/dist/test/scout-integration.test.js.map +0 -1
  98. package/dist/test/scout-prompt.test.d.ts +0 -2
  99. package/dist/test/scout-prompt.test.d.ts.map +0 -1
  100. package/dist/test/scout-prompt.test.js +0 -79
  101. package/dist/test/scout-prompt.test.js.map +0 -1
  102. package/dist/test/scout-runner-parse.test.d.ts +0 -2
  103. package/dist/test/scout-runner-parse.test.d.ts.map +0 -1
  104. package/dist/test/scout-runner-parse.test.js +0 -44
  105. package/dist/test/scout-runner-parse.test.js.map +0 -1
  106. package/dist/test/scout-runner-spawn.test.d.ts +0 -11
  107. package/dist/test/scout-runner-spawn.test.d.ts.map +0 -1
  108. package/dist/test/scout-runner-spawn.test.js +0 -359
  109. package/dist/test/scout-runner-spawn.test.js.map +0 -1
  110. package/dist/test/scout-scanner-fs.test.d.ts +0 -2
  111. package/dist/test/scout-scanner-fs.test.d.ts.map +0 -1
  112. package/dist/test/scout-scanner-fs.test.js +0 -188
  113. package/dist/test/scout-scanner-fs.test.js.map +0 -1
  114. package/dist/test/scout-scanner-pure.test.d.ts +0 -2
  115. package/dist/test/scout-scanner-pure.test.d.ts.map +0 -1
  116. package/dist/test/scout-scanner-pure.test.js +0 -131
  117. package/dist/test/scout-scanner-pure.test.js.map +0 -1
  118. package/dist/test/services-integration.test.d.ts +0 -2
  119. package/dist/test/services-integration.test.d.ts.map +0 -1
  120. package/dist/test/services-integration.test.js +0 -327
  121. package/dist/test/services-integration.test.js.map +0 -1
  122. package/dist/test/services-qa.test.d.ts +0 -2
  123. package/dist/test/services-qa.test.d.ts.map +0 -1
  124. package/dist/test/services-qa.test.js +0 -255
  125. package/dist/test/services-qa.test.js.map +0 -1
  126. package/dist/test/services-scout.test.d.ts +0 -2
  127. package/dist/test/services-scout.test.d.ts.map +0 -1
  128. package/dist/test/services-scout.test.js +0 -269
  129. package/dist/test/services-scout.test.js.map +0 -1
  130. package/dist/utils/id.d.ts +0 -12
  131. package/dist/utils/id.d.ts.map +0 -1
  132. package/dist/utils/id.js +0 -24
  133. package/dist/utils/id.js.map +0 -1
  134. package/dist/utils/id.test.d.ts +0 -5
  135. package/dist/utils/id.test.d.ts.map +0 -1
  136. package/dist/utils/id.test.js +0 -173
  137. package/dist/utils/id.test.js.map +0 -1
  138. package/dist/utils/index.d.ts +0 -6
  139. package/dist/utils/index.d.ts.map +0 -1
  140. package/dist/utils/index.js +0 -6
  141. package/dist/utils/index.js.map +0 -1
  142. package/dist/utils/json.d.ts +0 -9
  143. package/dist/utils/json.d.ts.map +0 -1
  144. package/dist/utils/json.js +0 -19
  145. package/dist/utils/json.js.map +0 -1
@@ -1,131 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import * as fs from 'node:fs';
3
- import * as path from 'node:path';
4
- import * as os from 'node:os';
5
- import { batchFiles, scanFiles } from '../scout/scanner.js';
6
- function makeFile(p, content = 'x', size = 1) {
7
- return { path: p, content, size };
8
- }
9
- describe('batchFiles', () => {
10
- it('with empty array returns empty array', () => {
11
- expect(batchFiles([])).toEqual([]);
12
- });
13
- it('with fewer files than batch size returns single batch', () => {
14
- const files = [makeFile('a.ts'), makeFile('b.ts')];
15
- const batches = batchFiles(files);
16
- expect(batches).toHaveLength(1);
17
- expect(batches[0]).toHaveLength(2);
18
- });
19
- it('with exact multiple returns correct number of batches', () => {
20
- const files = [makeFile('a'), makeFile('b'), makeFile('c'), makeFile('d'), makeFile('e'), makeFile('f')];
21
- const batches = batchFiles(files, 3);
22
- expect(batches).toHaveLength(2);
23
- });
24
- it('with remainder creates extra batch', () => {
25
- const files = [makeFile('a'), makeFile('b'), makeFile('c'), makeFile('d')];
26
- const batches = batchFiles(files, 3);
27
- expect(batches).toHaveLength(2);
28
- expect(batches[1]).toHaveLength(1);
29
- });
30
- it('default batch size is 3', () => {
31
- const files = Array.from({ length: 7 }, (_, i) => makeFile(`f${i}`));
32
- const batches = batchFiles(files);
33
- expect(batches).toHaveLength(3);
34
- expect(batches[0]).toHaveLength(3);
35
- expect(batches[1]).toHaveLength(3);
36
- expect(batches[2]).toHaveLength(1);
37
- });
38
- it('with custom batch size', () => {
39
- const files = Array.from({ length: 5 }, (_, i) => makeFile(`f${i}`));
40
- const batches = batchFiles(files, 2);
41
- expect(batches).toHaveLength(3);
42
- });
43
- it('preserves file order', () => {
44
- const files = [makeFile('a'), makeFile('b'), makeFile('c'), makeFile('d')];
45
- const batches = batchFiles(files, 2);
46
- expect(batches[0][0].path).toBe('a');
47
- expect(batches[0][1].path).toBe('b');
48
- expect(batches[1][0].path).toBe('c');
49
- expect(batches[1][1].path).toBe('d');
50
- });
51
- it('each batch has correct files', () => {
52
- const files = [makeFile('x'), makeFile('y'), makeFile('z')];
53
- const batches = batchFiles(files, 2);
54
- expect(batches[0]).toEqual([files[0], files[1]]);
55
- expect(batches[1]).toEqual([files[2]]);
56
- });
57
- it('with batch size 1 creates one batch per file', () => {
58
- const files = [makeFile('a'), makeFile('b'), makeFile('c')];
59
- const batches = batchFiles(files, 1);
60
- expect(batches).toHaveLength(3);
61
- batches.forEach((b) => expect(b).toHaveLength(1));
62
- });
63
- it('with batch size larger than array returns single batch', () => {
64
- const files = [makeFile('a'), makeFile('b')];
65
- const batches = batchFiles(files, 100);
66
- expect(batches).toHaveLength(1);
67
- expect(batches[0]).toHaveLength(2);
68
- });
69
- });
70
- describe('scanFiles', () => {
71
- let tmpDir;
72
- beforeEach(() => {
73
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scanner-test-'));
74
- });
75
- afterEach(() => {
76
- fs.rmSync(tmpDir, { recursive: true, force: true });
77
- });
78
- function writeFile(relPath, content) {
79
- const full = path.join(tmpDir, relPath);
80
- fs.mkdirSync(path.dirname(full), { recursive: true });
81
- fs.writeFileSync(full, content);
82
- }
83
- it('finds .ts files with include pattern', () => {
84
- writeFile('src/a.ts', 'export const a = 1;');
85
- writeFile('src/b.ts', 'export const b = 2;');
86
- writeFile('src/c.js', 'module.exports = {}');
87
- const files = scanFiles({ cwd: tmpDir, include: ['**/*.ts'] });
88
- expect(files).toHaveLength(2);
89
- expect(files.every((f) => f.path.endsWith('.ts'))).toBe(true);
90
- });
91
- it('excludes node_modules by default', () => {
92
- writeFile('src/a.ts', 'ok');
93
- writeFile('node_modules/pkg/index.ts', 'skip');
94
- const files = scanFiles({ cwd: tmpDir, include: ['**/*.ts'] });
95
- expect(files).toHaveLength(1);
96
- expect(files[0].path).toBe('src/a.ts');
97
- });
98
- it('respects maxFiles limit', () => {
99
- for (let i = 0; i < 10; i++) {
100
- writeFile(`src/f${i}.ts`, `const x = ${i};`);
101
- }
102
- const files = scanFiles({ cwd: tmpDir, include: ['**/*.ts'], maxFiles: 3 });
103
- expect(files).toHaveLength(3);
104
- });
105
- it('respects maxFileSize limit', () => {
106
- writeFile('small.ts', 'ok');
107
- writeFile('big.ts', 'x'.repeat(500));
108
- const files = scanFiles({ cwd: tmpDir, include: ['**/*.ts'], maxFileSize: 100 });
109
- expect(files).toHaveLength(1);
110
- expect(files[0].path).toBe('small.ts');
111
- });
112
- it('returns empty for non-existent directory', () => {
113
- const files = scanFiles({ cwd: path.join(tmpDir, 'nope'), include: ['**/*.ts'] });
114
- expect(files).toEqual([]);
115
- });
116
- it('with exclude patterns skips matching files', () => {
117
- writeFile('src/a.ts', 'ok');
118
- writeFile('src/b.generated.ts', 'skip');
119
- const files = scanFiles({ cwd: tmpDir, include: ['**/*.ts'], exclude: ['*.generated.ts'] });
120
- expect(files).toHaveLength(1);
121
- expect(files[0].path).toBe('src/a.ts');
122
- });
123
- it('returns content and size for each file', () => {
124
- writeFile('src/hello.ts', 'hello world');
125
- const files = scanFiles({ cwd: tmpDir, include: ['**/*.ts'] });
126
- expect(files).toHaveLength(1);
127
- expect(files[0].content).toBe('hello world');
128
- expect(files[0].size).toBe(11);
129
- });
130
- });
131
- //# sourceMappingURL=scout-scanner-pure.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scout-scanner-pure.test.js","sourceRoot":"","sources":["../../src/test/scout-scanner-pure.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=services-integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services-integration.test.d.ts","sourceRoot":"","sources":["../../src/test/services-integration.test.ts"],"names":[],"mappings":""}
@@ -1,327 +0,0 @@
1
- import { describe, it, expect, beforeAll, afterAll, vi } from 'vitest';
2
- import { createSQLiteAdapter } from '@blockspool/sqlite';
3
- import * as projects from '../repos/projects.js';
4
- import * as tickets from '../repos/tickets.js';
5
- import * as runs from '../repos/runs.js';
6
- import * as runSteps from '../repos/run_steps.js';
7
- import { runQa, getQaRunDetails } from '../services/qa.js';
8
- import { approveProposals } from '../services/scout.js';
9
- let db;
10
- beforeAll(async () => {
11
- db = await createSQLiteAdapter({ url: ':memory:' });
12
- });
13
- afterAll(async () => {
14
- await db.close();
15
- });
16
- // ---------------------------------------------------------------------------
17
- // Helpers
18
- // ---------------------------------------------------------------------------
19
- function makeOutput(overrides) {
20
- return {
21
- path: '/logs/out.log',
22
- absPath: '/tmp/logs/out.log',
23
- bytes: 0,
24
- truncated: false,
25
- tail: '',
26
- ...overrides,
27
- };
28
- }
29
- function makeExecResult(overrides) {
30
- return {
31
- status: 'success',
32
- exitCode: 0,
33
- signal: null,
34
- pid: 1234,
35
- startedAtMs: Date.now(),
36
- endedAtMs: Date.now() + 100,
37
- durationMs: 100,
38
- stdout: makeOutput(),
39
- stderr: makeOutput({ path: '/logs/err.log', absPath: '/tmp/logs/err.log' }),
40
- ...overrides,
41
- };
42
- }
43
- function makeExec(results) {
44
- let i = 0;
45
- return {
46
- run: vi.fn(async () => results[i++] ?? makeExecResult()),
47
- };
48
- }
49
- function makeLogger() {
50
- return {
51
- info: vi.fn(),
52
- warn: vi.fn(),
53
- error: vi.fn(),
54
- debug: vi.fn(),
55
- };
56
- }
57
- function makeQaConfig(overrides) {
58
- return {
59
- commands: [
60
- { name: 'build', cmd: 'npm run build' },
61
- { name: 'test', cmd: 'npm test' },
62
- ],
63
- artifacts: { dir: '.blockspool/artifacts', maxLogBytes: 1_000_000, tailBytes: 4096 },
64
- retry: { enabled: false, maxAttempts: 1 },
65
- ...overrides,
66
- };
67
- }
68
- function makeProposal(overrides) {
69
- return {
70
- id: 'scout-123-abc',
71
- category: 'refactor',
72
- title: 'Refactor auth module',
73
- description: 'Extract auth logic into separate service',
74
- acceptance_criteria: ['Auth service extracted', 'Tests pass'],
75
- verification_commands: ['npm run build'],
76
- allowed_paths: ['src/auth.ts'],
77
- files: ['src/auth.ts'],
78
- confidence: 85,
79
- rationale: 'Reduces coupling',
80
- estimated_complexity: 'simple',
81
- ...overrides,
82
- };
83
- }
84
- // ---------------------------------------------------------------------------
85
- // QA Service
86
- // ---------------------------------------------------------------------------
87
- describe('QA service — runQa with real DB', () => {
88
- let projId;
89
- beforeAll(async () => {
90
- const p = await projects.ensureForRepo(db, {
91
- id: 'proj_qa_svc',
92
- name: 'qa-svc',
93
- rootPath: '/tmp/qa-svc',
94
- });
95
- projId = p.id;
96
- });
97
- it('all commands pass -> run marked success', async () => {
98
- const exec = makeExec([makeExecResult(), makeExecResult()]);
99
- const result = await runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-svc', config: makeQaConfig() });
100
- expect(result.status).toBe('success');
101
- expect(result.attempts).toBe(1);
102
- // Verify run in DB
103
- const run = await runs.getById(db, result.runId);
104
- expect(run.status).toBe('success');
105
- // Verify steps in DB
106
- const steps = await runSteps.listByRun(db, result.runId);
107
- expect(steps).toHaveLength(2);
108
- expect(steps[0].status).toBe('success');
109
- expect(steps[1].status).toBe('success');
110
- });
111
- it('first command fails -> second is skipped', async () => {
112
- const exec = makeExec([
113
- makeExecResult({ status: 'failed', exitCode: 1 }),
114
- ]);
115
- const result = await runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-svc', config: makeQaConfig() });
116
- expect(result.status).toBe('failed');
117
- expect(result.failedAt).toBeDefined();
118
- expect(result.failedAt.stepName).toBe('build');
119
- const steps = await runSteps.listByRun(db, result.runId, { attempt: 1 });
120
- expect(steps[0].status).toBe('failed');
121
- expect(steps[1].status).toBe('skipped');
122
- });
123
- it('second command fails -> first is success, second is failed', async () => {
124
- const exec = makeExec([
125
- makeExecResult(),
126
- makeExecResult({ status: 'failed', exitCode: 2 }),
127
- ]);
128
- const result = await runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-svc', config: makeQaConfig() });
129
- expect(result.status).toBe('failed');
130
- expect(result.failedAt.stepName).toBe('test');
131
- const steps = await runSteps.listByRun(db, result.runId, { attempt: 1 });
132
- expect(steps[0].status).toBe('success');
133
- expect(steps[1].status).toBe('failed');
134
- });
135
- it('retry succeeds on second attempt', async () => {
136
- const exec = makeExec([
137
- // Attempt 1: build ok, test fails
138
- makeExecResult(),
139
- makeExecResult({ status: 'failed', exitCode: 1 }),
140
- // Attempt 2: both pass
141
- makeExecResult(),
142
- makeExecResult(),
143
- ]);
144
- const config = makeQaConfig({ retry: { enabled: true, maxAttempts: 2 } });
145
- const result = await runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-svc', config });
146
- expect(result.status).toBe('success');
147
- expect(result.attempts).toBe(2);
148
- });
149
- it('retry exhausted -> final failure', async () => {
150
- const exec = makeExec([
151
- makeExecResult({ status: 'failed', exitCode: 1 }),
152
- makeExecResult({ status: 'failed', exitCode: 1 }),
153
- ]);
154
- const config = makeQaConfig({
155
- commands: [{ name: 'build', cmd: 'npm run build' }],
156
- retry: { enabled: true, maxAttempts: 2 },
157
- });
158
- const result = await runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-svc', config });
159
- expect(result.status).toBe('failed');
160
- expect(result.attempts).toBe(2);
161
- const run = await runs.getById(db, result.runId);
162
- expect(run.status).toBe('failure');
163
- });
164
- it('maxAttemptsOverride overrides config', async () => {
165
- const exec = makeExec([
166
- makeExecResult({ status: 'failed', exitCode: 1 }),
167
- makeExecResult({ status: 'failed', exitCode: 1 }),
168
- makeExecResult(),
169
- ]);
170
- const config = makeQaConfig({
171
- commands: [{ name: 'build', cmd: 'npm run build' }],
172
- retry: { enabled: true, maxAttempts: 1 },
173
- });
174
- const result = await runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-svc', config, maxAttemptsOverride: 3 });
175
- expect(result.status).toBe('success');
176
- expect(result.attempts).toBe(3);
177
- });
178
- it('canceled via AbortSignal before start', async () => {
179
- const controller = new AbortController();
180
- controller.abort();
181
- const exec = makeExec([]);
182
- const result = await runQa({ db, exec, logger: makeLogger() }, {
183
- projectId: projId,
184
- repoRoot: '/tmp/qa-svc',
185
- config: makeQaConfig(),
186
- signal: controller.signal,
187
- });
188
- expect(result.status).toBe('canceled');
189
- expect(result.attempts).toBe(0);
190
- });
191
- it('throws when config has no commands', async () => {
192
- const exec = makeExec([]);
193
- await expect(runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-svc', config: makeQaConfig({ commands: [] }) })).rejects.toThrow('no commands');
194
- });
195
- it('throws on missing command name', async () => {
196
- const exec = makeExec([]);
197
- await expect(runQa({ db, exec, logger: makeLogger() }, {
198
- projectId: projId,
199
- repoRoot: '/tmp/qa-svc',
200
- config: makeQaConfig({ commands: [{ name: '', cmd: 'echo' }] }),
201
- })).rejects.toThrow('missing a name');
202
- });
203
- it('throws on duplicate command names', async () => {
204
- const exec = makeExec([]);
205
- await expect(runQa({ db, exec, logger: makeLogger() }, {
206
- projectId: projId,
207
- repoRoot: '/tmp/qa-svc',
208
- config: makeQaConfig({
209
- commands: [
210
- { name: 'build', cmd: 'npm run build' },
211
- { name: 'build', cmd: 'npm run build:prod' },
212
- ],
213
- }),
214
- })).rejects.toThrow('Duplicate');
215
- });
216
- it('timeout status maps to failed step', async () => {
217
- const exec = makeExec([
218
- makeExecResult({ status: 'timeout', exitCode: null }),
219
- ]);
220
- const config = makeQaConfig({
221
- commands: [{ name: 'slow', cmd: 'sleep 999', timeoutMs: 100 }],
222
- });
223
- const result = await runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-svc', config });
224
- expect(result.status).toBe('failed');
225
- });
226
- });
227
- // ---------------------------------------------------------------------------
228
- // QA Service — getQaRunDetails
229
- // ---------------------------------------------------------------------------
230
- describe('QA service — getQaRunDetails with real DB', () => {
231
- let projId;
232
- beforeAll(async () => {
233
- const p = await projects.ensureForRepo(db, {
234
- id: 'proj_qa_details',
235
- name: 'qa-details',
236
- rootPath: '/tmp/qa-details',
237
- });
238
- projId = p.id;
239
- });
240
- it('returns null for non-existent run', async () => {
241
- const result = await getQaRunDetails(db, 'run_nonexistent');
242
- expect(result).toBeNull();
243
- });
244
- it('returns run, steps, and summary', async () => {
245
- const exec = makeExec([makeExecResult(), makeExecResult()]);
246
- const qaResult = await runQa({ db, exec, logger: makeLogger() }, { projectId: projId, repoRoot: '/tmp/qa-details', config: makeQaConfig() });
247
- const details = await getQaRunDetails(db, qaResult.runId);
248
- expect(details).not.toBeNull();
249
- expect(details.run).not.toBeNull();
250
- expect(details.run.type).toBe('qa');
251
- expect(details.steps).toHaveLength(2);
252
- expect(details.summary.counts.passed).toBe(2);
253
- expect(details.summary.counts.failed).toBe(0);
254
- });
255
- });
256
- // ---------------------------------------------------------------------------
257
- // Scout Service — approveProposals
258
- // ---------------------------------------------------------------------------
259
- describe('Scout service — approveProposals with real DB', () => {
260
- let projId;
261
- beforeAll(async () => {
262
- const p = await projects.ensureForRepo(db, {
263
- id: 'proj_scout_svc',
264
- name: 'scout-svc',
265
- rootPath: '/tmp/scout-svc',
266
- });
267
- projId = p.id;
268
- });
269
- const mockGit = {
270
- findRepoRoot: vi.fn(async () => '/tmp/scout-svc'),
271
- getRemoteUrl: vi.fn(async () => 'https://github.com/test/repo'),
272
- getProjectId: vi.fn(() => 'proj_scout_svc'),
273
- };
274
- it('creates tickets from proposals', async () => {
275
- const proposals = [
276
- makeProposal({ title: 'Proposal A', confidence: 90 }),
277
- makeProposal({ title: 'Proposal B', confidence: 70, category: 'test' }),
278
- ];
279
- const created = await approveProposals({ db, git: mockGit }, projId, proposals);
280
- expect(created).toHaveLength(2);
281
- expect(created[0].title).toBe('Proposal A');
282
- expect(created[0].priority).toBe(90);
283
- expect(created[0].status).toBe('ready');
284
- expect(created[1].category).toBe('test');
285
- });
286
- it('ticket description includes acceptance criteria and rationale', async () => {
287
- const proposals = [
288
- makeProposal({
289
- title: 'Desc check',
290
- acceptance_criteria: ['Criterion 1', 'Criterion 2'],
291
- rationale: 'Important reason',
292
- files: ['src/x.ts'],
293
- estimated_complexity: 'moderate',
294
- confidence: 80,
295
- }),
296
- ];
297
- const created = await approveProposals({ db, git: mockGit }, projId, proposals);
298
- expect(created[0].description).toContain('Criterion 1');
299
- expect(created[0].description).toContain('Important reason');
300
- expect(created[0].description).toContain('moderate');
301
- expect(created[0].description).toContain('80%');
302
- });
303
- it('handles empty proposal list', async () => {
304
- const created = await approveProposals({ db, git: mockGit }, projId, []);
305
- expect(created).toEqual([]);
306
- });
307
- it('sets allowed_paths and verification_commands on tickets', async () => {
308
- const proposals = [
309
- makeProposal({
310
- title: 'With paths',
311
- allowed_paths: ['src/a.ts', 'src/b.ts'],
312
- verification_commands: ['npm run build', 'npm test'],
313
- }),
314
- ];
315
- const created = await approveProposals({ db, git: mockGit }, projId, proposals);
316
- expect(created[0].allowedPaths).toEqual(['src/a.ts', 'src/b.ts']);
317
- expect(created[0].verificationCommands).toEqual(['npm run build', 'npm test']);
318
- });
319
- it('tickets are persisted and retrievable', async () => {
320
- const proposals = [makeProposal({ title: 'Persist check' })];
321
- const created = await approveProposals({ db, git: mockGit }, projId, proposals);
322
- const fetched = await tickets.getById(db, created[0].id);
323
- expect(fetched).not.toBeNull();
324
- expect(fetched.title).toBe('Persist check');
325
- });
326
- });
327
- //# sourceMappingURL=services-integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services-integration.test.js","sourceRoot":"","sources":["../../src/test/services-integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=services-qa.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services-qa.test.d.ts","sourceRoot":"","sources":["../../src/test/services-qa.test.ts"],"names":[],"mappings":""}