sdlc-agent-4-enterprise-server 1.27.0 → 1.27.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.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <img src="https://img.shields.io/badge/version-1.26.0-blue?style=for-the-badge" alt="Version">
9
+ <img src="https://img.shields.io/badge/version-1.27.1-blue?style=for-the-badge" alt="Version">
10
10
  <img src="https://img.shields.io/badge/tools-66+-teal?style=for-the-badge" alt="Tools">
11
11
  <img src="https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge" alt="Node">
12
12
  </p>
package/dev-server.log ADDED
File without changes
@@ -33,10 +33,26 @@ export declare class CodeEnrichmentTaskCreator {
33
33
  createTasksForProject(projectId: string): Promise<number>;
34
34
  /** Skip if symbol already fully enriched (has summary). */
35
35
  private shouldCreateTask;
36
+ /**
37
+ * SA4E-106: Copy enrichment data from an already-enriched scope to current project.
38
+ * Matches by file content_hash + symbol name + kind.
39
+ * Uses COALESCE for pseudo_code to preserve PegaLogicNormalizer output.
40
+ * @param filePath - Relative file path in current project
41
+ * @param projectId - Current project ID
42
+ * @returns Number of symbols updated
43
+ */
44
+ private copyEnrichmentFromOtherScope;
45
+ /** Find a source file (another project) with enriched symbols for same content. */
46
+ private findSourceFileId;
47
+ /** Get the target file ID in the current project. */
48
+ private findTargetFileId;
49
+ /** Load enriched symbols from source file. */
50
+ private loadEnrichedSymbols;
51
+ /** Apply enrichment copy from source symbols to target file symbols. */
52
+ private applyEnrichmentCopy;
36
53
  /**
37
54
  * Cross-scope dedup: check if the same file (by content_hash) has already been
38
55
  * enriched in another project. If yes, skip LLM task creation entirely.
39
- * The enrichment data remains queryable from the other project's symbols.
40
56
  */
41
57
  private isFileEnrichedInOtherScope;
42
58
  private getSymbolKind;
@@ -33,11 +33,12 @@ export class CodeEnrichmentTaskCreator {
33
33
  async createTasks(symbolIds, filePath, projectId) {
34
34
  if (symbolIds.size === 0)
35
35
  return 0;
36
- // Cross-scope dedup: skip entire file if already enriched in another project
36
+ // SA4E-106: Cross-scope dedup — copy enrichment data instead of just skipping
37
37
  const enrichedElsewhere = await this.isFileEnrichedInOtherScope(filePath, projectId);
38
38
  if (enrichedElsewhere) {
39
- this.logger.debug({ filePath, projectId }, '[enrichment] Skipped — same hash enriched in another scope');
40
- return 0;
39
+ const copied = await this.copyEnrichmentFromOtherScope(filePath, projectId);
40
+ this.logger.debug({ filePath, projectId, copied }, '[enrichment] Cross-scope copy — enrichment data copied from another scope');
41
+ return 0; // No new LLM tasks needed
41
42
  }
42
43
  let created = 0;
43
44
  for (const [symbolName, symbolId] of symbolIds) {
@@ -102,24 +103,73 @@ export class CodeEnrichmentTaskCreator {
102
103
  // Skip only if COMPLETED AND has summary (CODE_ENRICHMENT done, not just TAG_ENRICHMENT)
103
104
  return !(row?.enrichment_status === 'COMPLETED' && row?.summary);
104
105
  }
106
+ /**
107
+ * SA4E-106: Copy enrichment data from an already-enriched scope to current project.
108
+ * Matches by file content_hash + symbol name + kind.
109
+ * Uses COALESCE for pseudo_code to preserve PegaLogicNormalizer output.
110
+ * @param filePath - Relative file path in current project
111
+ * @param projectId - Current project ID
112
+ * @returns Number of symbols updated
113
+ */
114
+ async copyEnrichmentFromOtherScope(filePath, projectId) {
115
+ const sourceFileId = await this.findSourceFileId(filePath, projectId);
116
+ if (!sourceFileId)
117
+ return 0;
118
+ const targetFileId = await this.findTargetFileId(filePath, projectId);
119
+ if (!targetFileId)
120
+ return 0;
121
+ const sourceSymbols = await this.loadEnrichedSymbols(sourceFileId);
122
+ return this.applyEnrichmentCopy(sourceSymbols, targetFileId);
123
+ }
124
+ /** Find a source file (another project) with enriched symbols for same content. */
125
+ async findSourceFileId(filePath, projectId) {
126
+ const currentFile = await this.adapter.getAsync('SELECT content_hash FROM files WHERE relative_path = ? AND project_id = ?', [filePath, projectId]);
127
+ if (!currentFile?.content_hash)
128
+ return null;
129
+ const sourceFile = await this.adapter.getAsync(`SELECT f.id FROM files f
130
+ JOIN symbols s ON s.file_id = f.id
131
+ WHERE f.content_hash = ? AND f.project_id != ?
132
+ AND s.enrichment_status = 'COMPLETED'
133
+ LIMIT 1`, [currentFile.content_hash, projectId]);
134
+ return sourceFile?.id ?? null;
135
+ }
136
+ /** Get the target file ID in the current project. */
137
+ async findTargetFileId(filePath, projectId) {
138
+ const targetFile = await this.adapter.getAsync('SELECT id FROM files WHERE relative_path = ? AND project_id = ?', [filePath, projectId]);
139
+ return targetFile?.id ?? null;
140
+ }
141
+ /** Load enriched symbols from source file. */
142
+ async loadEnrichedSymbols(sourceFileId) {
143
+ return this.adapter.allAsync(`SELECT name, kind, summary, pseudo_code, llm_tags FROM symbols
144
+ WHERE file_id = ? AND enrichment_status = 'COMPLETED'`, [sourceFileId]);
145
+ }
146
+ /** Apply enrichment copy from source symbols to target file symbols. */
147
+ async applyEnrichmentCopy(sourceSymbols, targetFileId) {
148
+ let copied = 0;
149
+ for (const src of sourceSymbols) {
150
+ if (!src.summary)
151
+ continue;
152
+ const result = await this.adapter.runAsync(`UPDATE symbols SET
153
+ summary = ?,
154
+ pseudo_code = COALESCE(?, pseudo_code),
155
+ llm_tags = ?,
156
+ enrichment_status = 'COMPLETED',
157
+ enriched_at = datetime('now')
158
+ WHERE file_id = ? AND name = ? AND kind = ?
159
+ AND (enrichment_status IS NULL OR enrichment_status != 'COMPLETED')`, [src.summary, src.pseudo_code, src.llm_tags, targetFileId, src.name, src.kind]);
160
+ if (result?.changes && result.changes > 0)
161
+ copied++;
162
+ }
163
+ return copied;
164
+ }
105
165
  /**
106
166
  * Cross-scope dedup: check if the same file (by content_hash) has already been
107
167
  * enriched in another project. If yes, skip LLM task creation entirely.
108
- * The enrichment data remains queryable from the other project's symbols.
109
168
  */
110
169
  async isFileEnrichedInOtherScope(filePath, currentProjectId) {
111
170
  try {
112
- // Get the content_hash of this file in the current project
113
- const currentFile = await this.adapter.getAsync('SELECT content_hash FROM files WHERE relative_path = ? AND project_id = ?', [filePath, currentProjectId]);
114
- if (!currentFile?.content_hash)
115
- return false;
116
- // Check if same hash exists in another project with at least one enriched symbol
117
- const enrichedElsewhere = await this.adapter.getAsync(`SELECT f.id FROM files f
118
- JOIN symbols s ON s.file_id = f.id
119
- WHERE f.content_hash = ? AND f.project_id != ?
120
- AND s.enrichment_status = 'COMPLETED'
121
- LIMIT 1`, [currentFile.content_hash, currentProjectId]);
122
- return !!enrichedElsewhere;
171
+ const sourceId = await this.findSourceFileId(filePath, currentProjectId);
172
+ return sourceId !== null;
123
173
  }
124
174
  catch {
125
175
  // Non-fatal: if query fails (table missing, etc.), proceed with task creation
@@ -1 +1 @@
1
- {"version":3,"file":"CodeEnrichmentTaskCreator.js","sourceRoot":"","sources":["../../../src/engine/enrichment/CodeEnrichmentTaskCreator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CodeEnrichmentTaskCreator.js","sourceRoot":"","sources":["../../../src/engine/enrichment/CodeEnrichmentTaskCreator.ts"],"names":[],"mappings":"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"}
@@ -68,9 +68,31 @@ export class KnowledgeService {
68
68
  }
69
69
  /** Save checkpoint (+ optional writes / messages) — projection updated. */
70
70
  async saveCheckpoint(ctx, threadId, input) {
71
- const thread = await this.ownedThread(ctx, threadId);
72
- if (!thread)
73
- return null;
71
+ const workspaceId = this.resolveWorkspaceId(ctx);
72
+ let thread = await this.ownedThread(ctx, threadId);
73
+ if (!thread) {
74
+ // LangGraph generates arbitrary thread_id UUIDs per run and persists via the
75
+ // checkpointer without a prior POST /threads — auto-create the thread if it
76
+ // genuinely does not exist (mock contract, IT-HYD-03). A thread owned by
77
+ // another workspace is NEVER created or written (SECURITY-REVIEW #18 → 404).
78
+ const existing = await this.db.getThread(threadId);
79
+ if (existing)
80
+ return null;
81
+ if (!isUuidV4(threadId))
82
+ return null;
83
+ const now = new Date().toISOString();
84
+ thread = {
85
+ thread_id: threadId,
86
+ workspace_id: workspaceId,
87
+ title: 'Auto thread',
88
+ agent_id: null,
89
+ status: 'active',
90
+ created_at: now,
91
+ updated_at: now,
92
+ };
93
+ await this.db.createThread(thread);
94
+ await this.db.appendEvent(workspaceId, threadId, 'THREAD_CREATED', { title: thread.title, agent_id: null });
95
+ }
74
96
  const checkpoint = await this.db.upsertCheckpoint(thread.workspace_id, threadId, input);
75
97
  const messages = input.messages ?? [];
76
98
  const seqBase = await this.db.countMessages(threadId);
@@ -1 +1 @@
1
- {"version":3,"file":"KnowledgeService.js","sourceRoot":"","sources":["../../src/knowledge/KnowledgeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KnowledgeService.js","sourceRoot":"","sources":["../../src/knowledge/KnowledgeService.ts"],"names":[],"mappings":"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"}
@@ -442,8 +442,11 @@ export class TaskWorker {
442
442
  }
443
443
  async handleTaskError(task, err) {
444
444
  this.consecutiveErrors++;
445
+ // SA4E-106: Non-retryable patterns include CODE_ENRICHMENT-specific errors
445
446
  const nonRetryable = err.message.includes('invalid_json')
446
- || err.message.includes('entry_not_found');
447
+ || err.message.includes('entry_not_found')
448
+ || err.message.includes('invalid_payload')
449
+ || err.message.includes('symbol_not_found');
447
450
  if (nonRetryable || task.retry_count + 1 >= task.max_retries) {
448
451
  await this.repo.markFailed(task.id, err.message);
449
452
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TaskWorker.js","sourceRoot":"","sources":["../../../../src/modules/memory/task-queue/TaskWorker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskWorker.js","sourceRoot":"","sources":["../../../../src/modules/memory/task-queue/TaskWorker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdlc-agent-4-enterprise-server",
3
- "version": "1.27.0",
3
+ "version": "1.27.1",
4
4
  "description": "Code Intelligence MCP Server — multi-agent SDLC pipeline with semantic memory, code graph, and draw.io integration",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -41,11 +41,13 @@ export class CodeEnrichmentTaskCreator {
41
41
  ): Promise<number> {
42
42
  if (symbolIds.size === 0) return 0;
43
43
 
44
- // Cross-scope dedup: skip entire file if already enriched in another project
44
+ // SA4E-106: Cross-scope dedup — copy enrichment data instead of just skipping
45
45
  const enrichedElsewhere = await this.isFileEnrichedInOtherScope(filePath, projectId);
46
46
  if (enrichedElsewhere) {
47
- this.logger.debug({ filePath, projectId }, '[enrichment] Skipped — same hash enriched in another scope');
48
- return 0;
47
+ const copied = await this.copyEnrichmentFromOtherScope(filePath, projectId);
48
+ this.logger.debug({ filePath, projectId, copied },
49
+ '[enrichment] Cross-scope copy — enrichment data copied from another scope');
50
+ return 0; // No new LLM tasks needed
49
51
  }
50
52
 
51
53
  let created = 0;
@@ -122,30 +124,97 @@ export class CodeEnrichmentTaskCreator {
122
124
  return !(row?.enrichment_status === 'COMPLETED' && row?.summary);
123
125
  }
124
126
 
127
+ /**
128
+ * SA4E-106: Copy enrichment data from an already-enriched scope to current project.
129
+ * Matches by file content_hash + symbol name + kind.
130
+ * Uses COALESCE for pseudo_code to preserve PegaLogicNormalizer output.
131
+ * @param filePath - Relative file path in current project
132
+ * @param projectId - Current project ID
133
+ * @returns Number of symbols updated
134
+ */
135
+ private async copyEnrichmentFromOtherScope(filePath: string, projectId: string): Promise<number> {
136
+ const sourceFileId = await this.findSourceFileId(filePath, projectId);
137
+ if (!sourceFileId) return 0;
138
+
139
+ const targetFileId = await this.findTargetFileId(filePath, projectId);
140
+ if (!targetFileId) return 0;
141
+
142
+ const sourceSymbols = await this.loadEnrichedSymbols(sourceFileId);
143
+ return this.applyEnrichmentCopy(sourceSymbols, targetFileId);
144
+ }
145
+
146
+ /** Find a source file (another project) with enriched symbols for same content. */
147
+ private async findSourceFileId(filePath: string, projectId: string): Promise<number | null> {
148
+ const currentFile = await this.adapter.getAsync<{ content_hash: string }>(
149
+ 'SELECT content_hash FROM files WHERE relative_path = ? AND project_id = ?',
150
+ [filePath, projectId],
151
+ );
152
+ if (!currentFile?.content_hash) return null;
153
+
154
+ const sourceFile = await this.adapter.getAsync<{ id: number }>(
155
+ `SELECT f.id FROM files f
156
+ JOIN symbols s ON s.file_id = f.id
157
+ WHERE f.content_hash = ? AND f.project_id != ?
158
+ AND s.enrichment_status = 'COMPLETED'
159
+ LIMIT 1`,
160
+ [currentFile.content_hash, projectId],
161
+ );
162
+ return sourceFile?.id ?? null;
163
+ }
164
+
165
+ /** Get the target file ID in the current project. */
166
+ private async findTargetFileId(filePath: string, projectId: string): Promise<number | null> {
167
+ const targetFile = await this.adapter.getAsync<{ id: number }>(
168
+ 'SELECT id FROM files WHERE relative_path = ? AND project_id = ?',
169
+ [filePath, projectId],
170
+ );
171
+ return targetFile?.id ?? null;
172
+ }
173
+
174
+ /** Load enriched symbols from source file. */
175
+ private async loadEnrichedSymbols(sourceFileId: number) {
176
+ return this.adapter.allAsync<{
177
+ name: string; kind: string; summary: string | null;
178
+ pseudo_code: string | null; llm_tags: string | null;
179
+ }>(
180
+ `SELECT name, kind, summary, pseudo_code, llm_tags FROM symbols
181
+ WHERE file_id = ? AND enrichment_status = 'COMPLETED'`,
182
+ [sourceFileId],
183
+ );
184
+ }
185
+
186
+ /** Apply enrichment copy from source symbols to target file symbols. */
187
+ private async applyEnrichmentCopy(
188
+ sourceSymbols: { name: string; kind: string; summary: string | null; pseudo_code: string | null; llm_tags: string | null }[],
189
+ targetFileId: number,
190
+ ): Promise<number> {
191
+ let copied = 0;
192
+ for (const src of sourceSymbols) {
193
+ if (!src.summary) continue;
194
+ const result = await this.adapter.runAsync(
195
+ `UPDATE symbols SET
196
+ summary = ?,
197
+ pseudo_code = COALESCE(?, pseudo_code),
198
+ llm_tags = ?,
199
+ enrichment_status = 'COMPLETED',
200
+ enriched_at = datetime('now')
201
+ WHERE file_id = ? AND name = ? AND kind = ?
202
+ AND (enrichment_status IS NULL OR enrichment_status != 'COMPLETED')`,
203
+ [src.summary, src.pseudo_code, src.llm_tags, targetFileId, src.name, src.kind],
204
+ );
205
+ if (result?.changes && result.changes > 0) copied++;
206
+ }
207
+ return copied;
208
+ }
209
+
125
210
  /**
126
211
  * Cross-scope dedup: check if the same file (by content_hash) has already been
127
212
  * enriched in another project. If yes, skip LLM task creation entirely.
128
- * The enrichment data remains queryable from the other project's symbols.
129
213
  */
130
214
  private async isFileEnrichedInOtherScope(filePath: string, currentProjectId: string): Promise<boolean> {
131
215
  try {
132
- // Get the content_hash of this file in the current project
133
- const currentFile = await this.adapter.getAsync<{ content_hash: string }>(
134
- 'SELECT content_hash FROM files WHERE relative_path = ? AND project_id = ?',
135
- [filePath, currentProjectId],
136
- );
137
- if (!currentFile?.content_hash) return false;
138
-
139
- // Check if same hash exists in another project with at least one enriched symbol
140
- const enrichedElsewhere = await this.adapter.getAsync<{ id: number }>(
141
- `SELECT f.id FROM files f
142
- JOIN symbols s ON s.file_id = f.id
143
- WHERE f.content_hash = ? AND f.project_id != ?
144
- AND s.enrichment_status = 'COMPLETED'
145
- LIMIT 1`,
146
- [currentFile.content_hash, currentProjectId],
147
- );
148
- return !!enrichedElsewhere;
216
+ const sourceId = await this.findSourceFileId(filePath, currentProjectId);
217
+ return sourceId !== null;
149
218
  } catch {
150
219
  // Non-fatal: if query fails (table missing, etc.), proceed with task creation
151
220
  return false;
@@ -0,0 +1,152 @@
1
+ /**
2
+ * SA4E-106: CodeEnrichmentTaskCreator — cross-scope enrichment copy.
3
+ * Verifies copyEnrichmentFromOtherScope copies summary, pseudo_code, llm_tags
4
+ * from enriched symbols in another project to the current project.
5
+ */
6
+
7
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
8
+ import { CodeEnrichmentTaskCreator } from '../CodeEnrichmentTaskCreator.js';
9
+ import type { DatabaseAdapter } from '../../../database/adapters/DatabaseAdapter.js';
10
+ import pino from 'pino';
11
+
12
+ const logger = pino({ level: 'silent' });
13
+
14
+ /** Create mock DB adapter with controllable query responses. */
15
+ function createMockAdapter() {
16
+ return {
17
+ getAsync: vi.fn(),
18
+ allAsync: vi.fn(() => Promise.resolve([])),
19
+ runAsync: vi.fn(() => Promise.resolve({ changes: 0, lastInsertRowid: 0 })),
20
+ getEngine: vi.fn(() => 'sqlite'),
21
+ } as unknown as DatabaseAdapter;
22
+ }
23
+
24
+ describe('SA4E-106: copyEnrichmentFromOtherScope', () => {
25
+ let adapter: DatabaseAdapter;
26
+ let creator: CodeEnrichmentTaskCreator;
27
+
28
+ beforeEach(() => {
29
+ adapter = createMockAdapter();
30
+ creator = new CodeEnrichmentTaskCreator(adapter, logger);
31
+ });
32
+
33
+ it('copies enrichment data from source scope to target', async () => {
34
+ // Setup: current file has content_hash
35
+ (adapter.getAsync as any)
36
+ .mockResolvedValueOnce({ content_hash: 'abc123' }) // findSourceFileId -> currentFile
37
+ .mockResolvedValueOnce({ id: 10 }) // findSourceFileId -> sourceFile
38
+ .mockResolvedValueOnce({ id: 20 }); // findTargetFileId -> targetFile
39
+
40
+ // Source symbols enriched
41
+ (adapter.allAsync as any).mockResolvedValueOnce([
42
+ { name: 'MyClass', kind: 'class', summary: 'A utility class', pseudo_code: null, llm_tags: 'domain:util' },
43
+ { name: 'process', kind: 'function', summary: 'Process data', pseudo_code: 'load then transform', llm_tags: 'responsibility:processing' },
44
+ ]);
45
+
46
+ // Both updates succeed
47
+ (adapter.runAsync as any)
48
+ .mockResolvedValueOnce({ changes: 1, lastInsertRowid: 0 })
49
+ .mockResolvedValueOnce({ changes: 1, lastInsertRowid: 0 });
50
+
51
+ const result = await (creator as any).copyEnrichmentFromOtherScope('src/utils.ts', 'project-B');
52
+ expect(result).toBe(2);
53
+ expect(adapter.runAsync).toHaveBeenCalledTimes(2);
54
+ });
55
+
56
+ it('returns 0 when no content_hash exists for current file', async () => {
57
+ (adapter.getAsync as any).mockResolvedValueOnce(null);
58
+
59
+ const result = await (creator as any).copyEnrichmentFromOtherScope('src/new.ts', 'project-B');
60
+ expect(result).toBe(0);
61
+ });
62
+
63
+ it('returns 0 when no source file found in other scope', async () => {
64
+ (adapter.getAsync as any)
65
+ .mockResolvedValueOnce({ content_hash: 'abc123' })
66
+ .mockResolvedValueOnce(null); // No source file
67
+
68
+ const result = await (creator as any).copyEnrichmentFromOtherScope('src/file.ts', 'project-B');
69
+ expect(result).toBe(0);
70
+ });
71
+
72
+ it('returns 0 when target file not found in current project', async () => {
73
+ (adapter.getAsync as any)
74
+ .mockResolvedValueOnce({ content_hash: 'abc123' })
75
+ .mockResolvedValueOnce({ id: 10 })
76
+ .mockResolvedValueOnce(null); // No target file
77
+
78
+ const result = await (creator as any).copyEnrichmentFromOtherScope('src/file.ts', 'project-B');
79
+ expect(result).toBe(0);
80
+ });
81
+
82
+ it('skips source symbols without summary', async () => {
83
+ (adapter.getAsync as any)
84
+ .mockResolvedValueOnce({ content_hash: 'abc123' })
85
+ .mockResolvedValueOnce({ id: 10 })
86
+ .mockResolvedValueOnce({ id: 20 });
87
+
88
+ // One symbol has no summary -> should be skipped
89
+ (adapter.allAsync as any).mockResolvedValueOnce([
90
+ { name: 'Helper', kind: 'class', summary: null, pseudo_code: null, llm_tags: null },
91
+ { name: 'run', kind: 'function', summary: 'Run logic', pseudo_code: 'call api', llm_tags: 'domain:api' },
92
+ ]);
93
+
94
+ (adapter.runAsync as any).mockResolvedValueOnce({ changes: 1, lastInsertRowid: 0 });
95
+
96
+ const result = await (creator as any).copyEnrichmentFromOtherScope('src/file.ts', 'project-B');
97
+ expect(result).toBe(1); // Only 'run' copied
98
+ expect(adapter.runAsync).toHaveBeenCalledTimes(1);
99
+ });
100
+
101
+ it('uses COALESCE for pseudo_code to preserve existing values', async () => {
102
+ (adapter.getAsync as any)
103
+ .mockResolvedValueOnce({ content_hash: 'abc123' })
104
+ .mockResolvedValueOnce({ id: 10 })
105
+ .mockResolvedValueOnce({ id: 20 });
106
+
107
+ (adapter.allAsync as any).mockResolvedValueOnce([
108
+ { name: 'PegaFlow', kind: 'pega_flow', summary: 'A flow', pseudo_code: 'new pseudo', llm_tags: 'domain:pega' },
109
+ ]);
110
+
111
+ (adapter.runAsync as any).mockResolvedValueOnce({ changes: 1, lastInsertRowid: 0 });
112
+
113
+ await (creator as any).copyEnrichmentFromOtherScope('src/flow.ts', 'project-B');
114
+
115
+ // Verify COALESCE is used in the SQL (pseudo_code param passed)
116
+ const sqlCall = (adapter.runAsync as any).mock.calls[0];
117
+ expect(sqlCall[0]).toContain('COALESCE');
118
+ expect(sqlCall[1]).toContain('new pseudo');
119
+ });
120
+ });
121
+
122
+ describe('SA4E-106: createTasks calls copyEnrichmentFromOtherScope', () => {
123
+ let adapter: DatabaseAdapter;
124
+ let creator: CodeEnrichmentTaskCreator;
125
+
126
+ beforeEach(() => {
127
+ adapter = createMockAdapter();
128
+ creator = new CodeEnrichmentTaskCreator(adapter, logger);
129
+ });
130
+
131
+ it('copies enrichment and returns 0 when file enriched in other scope', async () => {
132
+ // isFileEnrichedInOtherScope returns true
133
+ (adapter.getAsync as any)
134
+ .mockResolvedValueOnce({ content_hash: 'hash1' }) // isFileEnrichedInOtherScope -> currentFile
135
+ .mockResolvedValueOnce({ id: 5 }) // isFileEnrichedInOtherScope -> enrichedElsewhere
136
+ // copyEnrichmentFromOtherScope
137
+ .mockResolvedValueOnce({ content_hash: 'hash1' }) // findSourceFileId -> currentFile
138
+ .mockResolvedValueOnce({ id: 5 }) // findSourceFileId -> sourceFile
139
+ .mockResolvedValueOnce({ id: 15 }); // findTargetFileId -> targetFile
140
+
141
+ (adapter.allAsync as any).mockResolvedValueOnce([
142
+ { name: 'Foo', kind: 'class', summary: 'Foo class', pseudo_code: null, llm_tags: 'domain:core' },
143
+ ]);
144
+ (adapter.runAsync as any).mockResolvedValueOnce({ changes: 1, lastInsertRowid: 0 });
145
+
146
+ const symbolIds = new Map([['Foo', 1]]);
147
+ const result = await creator.createTasks(symbolIds, 'src/foo.ts', 'project-new');
148
+
149
+ // Returns 0 (no LLM tasks needed) but copy happened
150
+ expect(result).toBe(0);
151
+ });
152
+ });
@@ -0,0 +1,239 @@
1
+ /**
2
+ * SA4E-106: End-to-end enrichment flow integration test.
3
+ * Verifies: TaskWorker receives CODE_ENRICHMENT task -> dispatches to handler
4
+ * -> handler processes symbol -> symbols table updated with enrichment data.
5
+ * Also verifies Pega symbol enrichment routing.
6
+ */
7
+
8
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
9
+ import { TaskWorker } from '../../../modules/memory/task-queue/TaskWorker.js';
10
+ import { TaskType, TaskStatus } from '../../../modules/memory/task-queue/models.js';
11
+ import type { PendingTask } from '../../../modules/memory/task-queue/models.js';
12
+ import type { DatabaseAdapter } from '../../../database/adapters/DatabaseAdapter.js';
13
+ import type { MemoryEngine } from '../../../modules/memory/engine/index.js';
14
+ import type { CodeEnrichmentHandler } from '../CodeEnrichmentHandler.js';
15
+ import pino from 'pino';
16
+
17
+ const logger = pino({ level: 'silent' });
18
+
19
+ function createMockDb(): DatabaseAdapter {
20
+ return {
21
+ getAsync: vi.fn(),
22
+ allAsync: vi.fn(() => Promise.resolve([])),
23
+ runAsync: vi.fn(() => Promise.resolve({ changes: 0, lastInsertRowid: 0 })),
24
+ getEngine: vi.fn(() => 'sqlite'),
25
+ } as unknown as DatabaseAdapter;
26
+ }
27
+
28
+ function createMockEngine(): MemoryEngine {
29
+ const mockAdapter = {
30
+ getAsync: vi.fn(),
31
+ allAsync: vi.fn(() => Promise.resolve([])),
32
+ runAsync: vi.fn(() => Promise.resolve({ changes: 0 })),
33
+ getEngine: vi.fn(() => 'sqlite'),
34
+ };
35
+ return {
36
+ findById: vi.fn(),
37
+ updateTags: vi.fn(),
38
+ updateStructuredMap: vi.fn(),
39
+ getAdapter: vi.fn(() => mockAdapter),
40
+ } as unknown as MemoryEngine;
41
+ }
42
+
43
+ describe('SA4E-106: End-to-end enrichment flow', () => {
44
+ let db: DatabaseAdapter;
45
+ let engine: MemoryEngine;
46
+
47
+ beforeEach(() => {
48
+ db = createMockDb();
49
+ engine = createMockEngine();
50
+ });
51
+
52
+ it('dispatches CODE_ENRICHMENT task to handler and marks completed', async () => {
53
+ const handler: CodeEnrichmentHandler = {
54
+ enrichSymbol: vi.fn().mockResolvedValue(undefined),
55
+ } as any;
56
+
57
+ const worker = new TaskWorker(db, engine, logger, {});
58
+ worker.setCodeEnrichmentHandler(handler);
59
+ const repo = (worker as any).repo;
60
+ vi.spyOn(repo, 'markCompleted').mockResolvedValue(undefined);
61
+
62
+ const task: PendingTask = {
63
+ id: 1,
64
+ task_type: TaskType.CODE_ENRICHMENT,
65
+ entry_id: 100,
66
+ status: TaskStatus.PROCESSING,
67
+ payload: JSON.stringify({
68
+ symbolId: 100, symbolName: 'MyClass', symbolKind: 'class',
69
+ projectId: 'proj-1', filePath: 'src/a.ts', workspaceType: 'standard',
70
+ }),
71
+ error: null,
72
+ retry_count: 0,
73
+ max_retries: 3,
74
+ created_at: '2025-01-01T00:00:00Z',
75
+ started_at: null,
76
+ completed_at: null,
77
+ };
78
+
79
+ await (worker as any).processTask(task);
80
+
81
+ expect(handler.enrichSymbol).toHaveBeenCalledWith(task);
82
+ expect(repo.markCompleted).toHaveBeenCalledWith(1);
83
+ });
84
+
85
+ it('resets for retry when handler not injected', async () => {
86
+ const worker = new TaskWorker(db, engine, logger, {});
87
+ const repo = (worker as any).repo;
88
+ vi.spyOn(repo, 'resetForRetry').mockResolvedValue(undefined);
89
+ vi.spyOn(repo, 'markCompleted').mockResolvedValue(undefined);
90
+
91
+ const task: PendingTask = {
92
+ id: 2,
93
+ task_type: TaskType.CODE_ENRICHMENT,
94
+ entry_id: 200,
95
+ status: TaskStatus.PROCESSING,
96
+ payload: JSON.stringify({
97
+ symbolId: 200, symbolName: 'fn', symbolKind: 'function',
98
+ projectId: 'proj-1', filePath: 'src/b.ts', workspaceType: 'standard',
99
+ }),
100
+ error: null,
101
+ retry_count: 0,
102
+ max_retries: 3,
103
+ created_at: '2025-01-01T00:00:00Z',
104
+ started_at: null,
105
+ completed_at: null,
106
+ };
107
+
108
+ await (worker as any).processTask(task);
109
+
110
+ expect(repo.resetForRetry).toHaveBeenCalledWith(2);
111
+ });
112
+
113
+ it('handles invalid_payload error as non-retryable', async () => {
114
+ const handler: CodeEnrichmentHandler = {
115
+ enrichSymbol: vi.fn().mockRejectedValue(
116
+ new Error('invalid_payload: missing symbolId'),
117
+ ),
118
+ } as any;
119
+
120
+ const worker = new TaskWorker(db, engine, logger, {});
121
+ worker.setCodeEnrichmentHandler(handler);
122
+ const repo = (worker as any).repo;
123
+ vi.spyOn(repo, 'markFailed').mockResolvedValue(undefined);
124
+ vi.spyOn(repo, 'resetForRetry').mockResolvedValue(undefined);
125
+
126
+ const task: PendingTask = {
127
+ id: 3,
128
+ task_type: TaskType.CODE_ENRICHMENT,
129
+ entry_id: 300,
130
+ status: TaskStatus.PROCESSING,
131
+ payload: '{}',
132
+ error: null,
133
+ retry_count: 0,
134
+ max_retries: 3,
135
+ created_at: '2025-01-01T00:00:00Z',
136
+ started_at: null,
137
+ completed_at: null,
138
+ };
139
+
140
+ await (worker as any).processTask(task);
141
+
142
+ expect(repo.markFailed).toHaveBeenCalledWith(
143
+ 3, 'invalid_payload: missing symbolId',
144
+ );
145
+ expect(repo.resetForRetry).not.toHaveBeenCalled();
146
+ });
147
+
148
+ it('handles symbol_not_found error as non-retryable', async () => {
149
+ const handler: CodeEnrichmentHandler = {
150
+ enrichSymbol: vi.fn().mockRejectedValue(
151
+ new Error('symbol_not_found: 999'),
152
+ ),
153
+ } as any;
154
+
155
+ const worker = new TaskWorker(db, engine, logger, {});
156
+ worker.setCodeEnrichmentHandler(handler);
157
+ const repo = (worker as any).repo;
158
+ vi.spyOn(repo, 'markFailed').mockResolvedValue(undefined);
159
+ vi.spyOn(repo, 'resetForRetry').mockResolvedValue(undefined);
160
+
161
+ const task: PendingTask = {
162
+ id: 4,
163
+ task_type: TaskType.CODE_ENRICHMENT,
164
+ entry_id: 999,
165
+ status: TaskStatus.PROCESSING,
166
+ payload: JSON.stringify({
167
+ symbolId: 999, symbolName: 'Ghost', symbolKind: 'function',
168
+ projectId: 'proj-1', filePath: 'src/c.ts', workspaceType: 'standard',
169
+ }),
170
+ error: null,
171
+ retry_count: 0,
172
+ max_retries: 3,
173
+ created_at: '2025-01-01T00:00:00Z',
174
+ started_at: null,
175
+ completed_at: null,
176
+ };
177
+
178
+ await (worker as any).processTask(task);
179
+
180
+ expect(repo.markFailed).toHaveBeenCalledWith(4, 'symbol_not_found: 999');
181
+ expect(repo.resetForRetry).not.toHaveBeenCalled();
182
+ });
183
+ });
184
+
185
+ describe('SA4E-106: Pega symbol enrichment routing', () => {
186
+ let db: DatabaseAdapter;
187
+ let engine: MemoryEngine;
188
+
189
+ beforeEach(() => {
190
+ db = createMockDb();
191
+ engine = createMockEngine();
192
+ });
193
+
194
+ it('Pega symbol task sets workspaceType=pega in payload', () => {
195
+ const payload = JSON.stringify({
196
+ symbolId: 500, symbolName: 'ProcessClaim',
197
+ symbolKind: 'pega_flow', projectId: 'pega-proj',
198
+ filePath: 'rules/ProcessClaim.json', workspaceType: 'pega',
199
+ });
200
+
201
+ const parsed = JSON.parse(payload);
202
+ expect(parsed.workspaceType).toBe('pega');
203
+ expect(parsed.symbolKind).toBe('pega_flow');
204
+ });
205
+
206
+ it('dispatches Pega symbol to handler same as standard', async () => {
207
+ const handler: CodeEnrichmentHandler = {
208
+ enrichSymbol: vi.fn().mockResolvedValue(undefined),
209
+ } as any;
210
+
211
+ const worker = new TaskWorker(db, engine, logger, {});
212
+ worker.setCodeEnrichmentHandler(handler);
213
+ const repo = (worker as any).repo;
214
+ vi.spyOn(repo, 'markCompleted').mockResolvedValue(undefined);
215
+
216
+ const task: PendingTask = {
217
+ id: 5,
218
+ task_type: TaskType.CODE_ENRICHMENT,
219
+ entry_id: 500,
220
+ status: TaskStatus.PROCESSING,
221
+ payload: JSON.stringify({
222
+ symbolId: 500, symbolName: 'ProcessClaim',
223
+ symbolKind: 'pega_flow', projectId: 'pega-proj',
224
+ filePath: 'rules/ProcessClaim.json', workspaceType: 'pega',
225
+ }),
226
+ error: null,
227
+ retry_count: 0,
228
+ max_retries: 3,
229
+ created_at: '2025-01-01T00:00:00Z',
230
+ started_at: null,
231
+ completed_at: null,
232
+ };
233
+
234
+ await (worker as any).processTask(task);
235
+
236
+ expect(handler.enrichSymbol).toHaveBeenCalledWith(task);
237
+ expect(repo.markCompleted).toHaveBeenCalledWith(5);
238
+ });
239
+ });
@@ -93,8 +93,29 @@ export class KnowledgeService {
93
93
 
94
94
  /** Save checkpoint (+ optional writes / messages) — projection updated. */
95
95
  async saveCheckpoint(ctx: ProjectContext, threadId: string, input: SaveCheckpointInput): Promise<Checkpoint | null> {
96
- const thread = await this.ownedThread(ctx, threadId);
97
- if (!thread) return null;
96
+ const workspaceId = this.resolveWorkspaceId(ctx);
97
+ let thread = await this.ownedThread(ctx, threadId);
98
+ if (!thread) {
99
+ // LangGraph generates arbitrary thread_id UUIDs per run and persists via the
100
+ // checkpointer without a prior POST /threads — auto-create the thread if it
101
+ // genuinely does not exist (mock contract, IT-HYD-03). A thread owned by
102
+ // another workspace is NEVER created or written (SECURITY-REVIEW #18 → 404).
103
+ const existing = await this.db.getThread(threadId);
104
+ if (existing) return null;
105
+ if (!isUuidV4(threadId)) return null;
106
+ const now = new Date().toISOString();
107
+ thread = {
108
+ thread_id: threadId,
109
+ workspace_id: workspaceId,
110
+ title: 'Auto thread',
111
+ agent_id: null,
112
+ status: 'active',
113
+ created_at: now,
114
+ updated_at: now,
115
+ };
116
+ await this.db.createThread(thread);
117
+ await this.db.appendEvent(workspaceId, threadId, 'THREAD_CREATED', { title: thread.title, agent_id: null });
118
+ }
98
119
  const checkpoint = await this.db.upsertCheckpoint(thread.workspace_id, threadId, input);
99
120
  const messages = input.messages ?? [];
100
121
  const seqBase = await this.db.countMessages(threadId);
@@ -57,6 +57,27 @@ describe('KnowledgeService', () => {
57
57
  expect(await service.getArtifacts(ctx('ws-B'), thread.thread_id)).toBeNull();
58
58
  });
59
59
 
60
+ it('saveCheckpoint auto-creates a thread for a fresh UUID it has never seen (LangGraph checkpointer)', async () => {
61
+ const freshId = 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa';
62
+ const saved = await service.saveCheckpoint(ctx('ws-A'), freshId, { checkpoint: { v: 1, channel_values: {} } });
63
+ expect(saved).not.toBeNull();
64
+ expect(saved?.thread_id).toBe(freshId);
65
+ expect(saved?.version).toBe(1);
66
+ const loaded = await service.getCheckpoint(ctx('ws-A'), freshId);
67
+ expect(loaded?.checkpoint).toEqual({ v: 1, channel_values: {} });
68
+ expect(await service.getThread(ctx('ws-A'), freshId)).not.toBeNull();
69
+ // the new thread is visible to listThreads (multi-IDE hydrate)
70
+ const threads = await service.listThreads(ctx('ws-A'));
71
+ expect(threads.some((t) => t.thread_id === freshId)).toBe(true);
72
+ // a second PUT bumps version (idempotent upsert, IT-HYD-03)
73
+ await service.saveCheckpoint(ctx('ws-A'), freshId, { checkpoint: { v: 2, channel_values: {} } });
74
+ expect((await service.getCheckpoint(ctx('ws-A'), freshId))?.version).toBe(2);
75
+ });
76
+
77
+ it('saveCheckpoint rejects a non-UUID thread id (404 path)', async () => {
78
+ expect(await service.saveCheckpoint(ctx('ws-A'), 'not-a-uuid', { checkpoint: { v: 1 } })).toBeNull();
79
+ });
80
+
60
81
  it('saveCheckpoint returns null for a thread owned by another workspace', async () => {
61
82
  const thread = await service.createThread(ctx('ws-A'), {});
62
83
  const saved = await service.saveCheckpoint(ctx('ws-B'), thread.thread_id, { checkpoint: { v: 1 } });
@@ -127,6 +127,29 @@ describe('Knowledge REST API — /api/v1', () => {
127
127
  expect(res.status).toBe(404);
128
128
  });
129
129
 
130
+ it('PUT checkpoint auto-creates a thread for a never-seen UUID (LangGraph checkpointer)', async () => {
131
+ const { app } = makeApp();
132
+ const freshId = 'bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb';
133
+ const res = await app.request(`/api/v1/threads/${freshId}/checkpoint`, {
134
+ method: 'PUT',
135
+ headers: wsHeaders('ws-A'),
136
+ body: JSON.stringify({ checkpoint: { v: 1, channel_values: { ticketKey: 'X-1' } } }),
137
+ });
138
+ expect(res.status).toBe(200);
139
+ const body = (await res.json()) as any;
140
+ expect(body.data.thread_id).toBe(freshId);
141
+ expect(body.data.version).toBe(1);
142
+
143
+ const getRes = await app.request(`/api/v1/threads/${freshId}/checkpoint`, { headers: wsHeaders('ws-A') });
144
+ expect(getRes.status).toBe(200);
145
+ const getBody = (await getRes.json()) as any;
146
+ expect(getBody.data.checkpoint.channel_values.ticketKey).toBe('X-1');
147
+
148
+ const listRes = await app.request('/api/v1/threads', { headers: wsHeaders('ws-A') });
149
+ const listBody = (await listRes.json()) as any;
150
+ expect(listBody.data.some((t: { thread_id: string }) => t.thread_id === freshId)).toBe(true);
151
+ });
152
+
130
153
  it('PUT checkpoint over body limit returns 413 (#23)', async () => {
131
154
  const { app } = makeApp(1024); // tiny limit for fast test
132
155
  const { thread_id } = await createThread(app, 'ws-A');
@@ -499,8 +499,11 @@ export class TaskWorker {
499
499
 
500
500
  private async handleTaskError(task: PendingTask, err: Error): Promise<void> {
501
501
  this.consecutiveErrors++;
502
+ // SA4E-106: Non-retryable patterns include CODE_ENRICHMENT-specific errors
502
503
  const nonRetryable = err.message.includes('invalid_json')
503
- || err.message.includes('entry_not_found');
504
+ || err.message.includes('entry_not_found')
505
+ || err.message.includes('invalid_payload')
506
+ || err.message.includes('symbol_not_found');
504
507
  if (nonRetryable || task.retry_count + 1 >= task.max_retries) {
505
508
  await this.repo.markFailed(task.id, err.message);
506
509
  } else {
@@ -139,3 +139,97 @@ describe('UT-12: loadPreviousContext', () => {
139
139
  expect(result).toBeNull();
140
140
  });
141
141
  });
142
+
143
+
144
+ /**
145
+ * SA4E-106: handleTaskError — non-retryable error patterns.
146
+ * Verifies invalid_payload and symbol_not_found are marked failed immediately.
147
+ */
148
+ describe('SA4E-106: handleTaskError non-retryable patterns', () => {
149
+ let db: DatabaseAdapter;
150
+ let engine: MemoryEngine;
151
+
152
+ beforeEach(() => {
153
+ db = createMockDb();
154
+ engine = createMockEngine(new Map());
155
+ });
156
+
157
+ function createWorkerWithSpies() {
158
+ const worker = new TaskWorker(db, engine, logger, testConfig);
159
+ const repo = (worker as any).repo;
160
+ // Spy on repo methods to track calls without executing real SQL
161
+ vi.spyOn(repo, 'markFailed').mockResolvedValue(undefined);
162
+ vi.spyOn(repo, 'resetForRetry').mockResolvedValue(undefined);
163
+ return { worker, repo };
164
+ }
165
+
166
+ function createFakeTask(retryCount = 0, maxRetries = 3): any {
167
+ return { id: 42, retry_count: retryCount, max_retries: maxRetries };
168
+ }
169
+
170
+ it('marks task failed immediately for invalid_payload error', async () => {
171
+ const { worker, repo } = createWorkerWithSpies();
172
+ const task = createFakeTask();
173
+ const error = new Error('invalid_payload: symbolId is required');
174
+
175
+ await (worker as any).handleTaskError(task, error);
176
+
177
+ expect(repo.markFailed).toHaveBeenCalledWith(42, error.message);
178
+ expect(repo.resetForRetry).not.toHaveBeenCalled();
179
+ });
180
+
181
+ it('marks task failed immediately for symbol_not_found error', async () => {
182
+ const { worker, repo } = createWorkerWithSpies();
183
+ const task = createFakeTask();
184
+ const error = new Error('symbol_not_found: 999');
185
+
186
+ await (worker as any).handleTaskError(task, error);
187
+
188
+ expect(repo.markFailed).toHaveBeenCalledWith(42, error.message);
189
+ expect(repo.resetForRetry).not.toHaveBeenCalled();
190
+ });
191
+
192
+ it('marks task failed immediately for invalid_json error', async () => {
193
+ const { worker, repo } = createWorkerWithSpies();
194
+ const task = createFakeTask();
195
+ const error = new Error('invalid_json: unexpected token');
196
+
197
+ await (worker as any).handleTaskError(task, error);
198
+
199
+ expect(repo.markFailed).toHaveBeenCalledWith(42, error.message);
200
+ expect(repo.resetForRetry).not.toHaveBeenCalled();
201
+ });
202
+
203
+ it('marks task failed immediately for entry_not_found error', async () => {
204
+ const { worker, repo } = createWorkerWithSpies();
205
+ const task = createFakeTask();
206
+ const error = new Error('entry_not_found');
207
+
208
+ await (worker as any).handleTaskError(task, error);
209
+
210
+ expect(repo.markFailed).toHaveBeenCalledWith(42, error.message);
211
+ expect(repo.resetForRetry).not.toHaveBeenCalled();
212
+ });
213
+
214
+ it('resets for retry on transient error with retries remaining', async () => {
215
+ const { worker, repo } = createWorkerWithSpies();
216
+ const task = createFakeTask(0, 3);
217
+ const error = new Error('llm_timeout');
218
+
219
+ await (worker as any).handleTaskError(task, error);
220
+
221
+ expect(repo.markFailed).toHaveBeenCalledWith(42, error.message);
222
+ expect(repo.resetForRetry).toHaveBeenCalledWith(42);
223
+ });
224
+
225
+ it('marks failed when max retries exhausted for transient error', async () => {
226
+ const { worker, repo } = createWorkerWithSpies();
227
+ const task = createFakeTask(2, 3); // retry_count + 1 >= max_retries
228
+ const error = new Error('llm_timeout');
229
+
230
+ await (worker as any).handleTaskError(task, error);
231
+
232
+ expect(repo.markFailed).toHaveBeenCalledWith(42, error.message);
233
+ expect(repo.resetForRetry).not.toHaveBeenCalled();
234
+ });
235
+ });