@auto-engineer/pipeline 0.0.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.turbo/turbo-build.log +6 -5
  2. package/CHANGELOG.md +14 -0
  3. package/dist/src/__tests__/e2e/helpers.d.ts +48 -0
  4. package/dist/src/__tests__/e2e/helpers.d.ts.map +1 -0
  5. package/dist/src/__tests__/e2e/helpers.js +253 -0
  6. package/dist/src/__tests__/e2e/helpers.js.map +1 -0
  7. package/dist/src/__tests__/e2e/kanban-migration.e2e.specs.d.ts +2 -0
  8. package/dist/src/__tests__/e2e/kanban-migration.e2e.specs.d.ts.map +1 -0
  9. package/dist/src/__tests__/e2e/kanban-migration.e2e.specs.js +195 -0
  10. package/dist/src/__tests__/e2e/kanban-migration.e2e.specs.js.map +1 -0
  11. package/dist/src/__tests__/e2e/types.d.ts +107 -0
  12. package/dist/src/__tests__/e2e/types.d.ts.map +1 -0
  13. package/dist/src/__tests__/e2e/types.js +2 -0
  14. package/dist/src/__tests__/e2e/types.js.map +1 -0
  15. package/dist/src/file-syncer/crypto/jwe-encryptor.d.ts +15 -0
  16. package/dist/src/file-syncer/crypto/jwe-encryptor.d.ts.map +1 -0
  17. package/dist/src/file-syncer/crypto/jwe-encryptor.js +64 -0
  18. package/dist/src/file-syncer/crypto/jwe-encryptor.js.map +1 -0
  19. package/dist/src/file-syncer/crypto/provider-resolver.d.ts +24 -0
  20. package/dist/src/file-syncer/crypto/provider-resolver.d.ts.map +1 -0
  21. package/dist/src/file-syncer/crypto/provider-resolver.js +71 -0
  22. package/dist/src/file-syncer/crypto/provider-resolver.js.map +1 -0
  23. package/dist/src/file-syncer/discovery/bareImports.d.ts +3 -0
  24. package/dist/src/file-syncer/discovery/bareImports.d.ts.map +1 -0
  25. package/dist/src/file-syncer/discovery/bareImports.js +36 -0
  26. package/dist/src/file-syncer/discovery/bareImports.js.map +1 -0
  27. package/dist/src/file-syncer/discovery/dts.d.ts +8 -0
  28. package/dist/src/file-syncer/discovery/dts.d.ts.map +1 -0
  29. package/dist/src/file-syncer/discovery/dts.js +99 -0
  30. package/dist/src/file-syncer/discovery/dts.js.map +1 -0
  31. package/dist/src/file-syncer/index.d.ts +46 -0
  32. package/dist/src/file-syncer/index.d.ts.map +1 -0
  33. package/dist/src/file-syncer/index.js +392 -0
  34. package/dist/src/file-syncer/index.js.map +1 -0
  35. package/dist/src/file-syncer/sync/resolveSyncFileSet.d.ts +7 -0
  36. package/dist/src/file-syncer/sync/resolveSyncFileSet.d.ts.map +1 -0
  37. package/dist/src/file-syncer/sync/resolveSyncFileSet.js +86 -0
  38. package/dist/src/file-syncer/sync/resolveSyncFileSet.js.map +1 -0
  39. package/dist/src/file-syncer/types/wire.d.ts +14 -0
  40. package/dist/src/file-syncer/types/wire.d.ts.map +1 -0
  41. package/dist/src/file-syncer/types/wire.js +2 -0
  42. package/dist/src/file-syncer/types/wire.js.map +1 -0
  43. package/dist/src/file-syncer/utils/hash.d.ts +5 -0
  44. package/dist/src/file-syncer/utils/hash.d.ts.map +1 -0
  45. package/dist/src/file-syncer/utils/hash.js +19 -0
  46. package/dist/src/file-syncer/utils/hash.js.map +1 -0
  47. package/dist/src/file-syncer/utils/path.d.ts +13 -0
  48. package/dist/src/file-syncer/utils/path.d.ts.map +1 -0
  49. package/dist/src/file-syncer/utils/path.js +74 -0
  50. package/dist/src/file-syncer/utils/path.js.map +1 -0
  51. package/dist/src/index.d.ts.map +1 -1
  52. package/dist/src/index.js.map +1 -1
  53. package/dist/src/server/pipeline-server.d.ts.map +1 -1
  54. package/dist/src/server/pipeline-server.js +11 -12
  55. package/dist/src/server/pipeline-server.js.map +1 -1
  56. package/dist/tsconfig.tsbuildinfo +1 -1
  57. package/package.json +6 -3
  58. package/src/index.ts +0 -2
  59. package/src/server/pipeline-server.ts +12 -14
@@ -1,5 +1,6 @@
1
-
2
- > @auto-engineer/pipeline@0.0.1 build /home/runner/work/auto-engineer/auto-engineer/packages/pipeline
3
- > tsc && tsx ../../scripts/fix-esm-imports.ts
4
-
5
- Fixed ESM imports in dist/
1
+
2
+ 
3
+ > @auto-engineer/pipeline@0.14.0 build /Users/sam/WebstormProjects/top/auto-engineer/packages/pipeline
4
+ > tsc && tsx ../../scripts/fix-esm-imports.ts
5
+
6
+ Fixed ESM imports in dist/
package/CHANGELOG.md ADDED
@@ -0,0 +1,14 @@
1
+ # @auto-engineer/pipeline
2
+
3
+ ## 0.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Rewrite CLI and Pipeline
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies []:
12
+ - @auto-engineer/file-store@0.14.0
13
+ - @auto-engineer/message-bus@0.14.0
14
+ - @auto-engineer/message-store@0.14.0
@@ -0,0 +1,48 @@
1
+ import type { CommandAck, GoldenMaster, PipelineResponse, PipelineSnapshot, PositionalMessage, RegistryResponse, SanitizedEvent, SessionInfo, StatsResponse } from './types';
2
+ export declare function fetchRegistry(baseUrl: string): Promise<RegistryResponse>;
3
+ export declare function fetchPipeline(baseUrl: string): Promise<PipelineResponse>;
4
+ export declare function fetchSessions(baseUrl: string): Promise<SessionInfo[]>;
5
+ export declare function fetchMessages(baseUrl: string, count?: number): Promise<PositionalMessage[]>;
6
+ export declare function fetchStats(baseUrl: string): Promise<StatsResponse>;
7
+ export declare function dispatchCommand(baseUrl: string, commandType: string, data?: Record<string, unknown>): Promise<CommandAck>;
8
+ export declare function delay(ms: number): Promise<void>;
9
+ export declare function waitForPipelineCompletion(baseUrl: string, timeoutMs: number, criticalNodes?: string[]): Promise<void>;
10
+ export declare function recordStatusProgression(baseUrl: string, timeoutMs: number, pollIntervalMs?: number): Promise<PipelineSnapshot[]>;
11
+ export declare function sanitizeEventData(data: Record<string, unknown>): Record<string, unknown>;
12
+ export declare function extractEventSequence(messages: PositionalMessage[]): SanitizedEvent[];
13
+ export declare function writeSnapshot(snapshotDir: string, filename: string, data: unknown): Promise<void>;
14
+ export declare function readSnapshot<T>(snapshotDir: string, filename: string): Promise<T | null>;
15
+ export declare function createGoldenMaster(baseUrl: string, timeoutMs: number): Promise<GoldenMaster>;
16
+ export declare function groupEventsByCorrelationId(events: PositionalMessage[]): Map<string, PositionalMessage[]>;
17
+ export declare function extractEventTypes(events: PositionalMessage[]): string[];
18
+ export declare function compareEventSets(expected: string[], actual: string[]): {
19
+ missing: string[];
20
+ extra: string[];
21
+ };
22
+ export declare function validateSequentialDependencies(events: PositionalMessage[], dependencies: [string, string][]): boolean;
23
+ export interface FileSnapshot {
24
+ contextFiles: {
25
+ exportResult: boolean;
26
+ schemaJson: boolean;
27
+ schemaGraphql: boolean;
28
+ iaScheme: boolean;
29
+ };
30
+ serverFiles: {
31
+ packageJson: boolean;
32
+ srcExists: boolean;
33
+ domainSlices: string[];
34
+ };
35
+ clientFiles: {
36
+ packageJson: boolean;
37
+ srcExists: boolean;
38
+ molecules: string[];
39
+ organisms: string[];
40
+ pages: string[];
41
+ };
42
+ }
43
+ export declare function captureFileSnapshot(exampleDir: string): Promise<FileSnapshot>;
44
+ export declare function compareFileSnapshots(expected: FileSnapshot, actual: FileSnapshot): {
45
+ matches: boolean;
46
+ differences: string[];
47
+ };
48
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/e2e/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,253 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ export async function fetchRegistry(baseUrl) {
4
+ const response = await fetch(`${baseUrl}/registry`);
5
+ return response.json();
6
+ }
7
+ export async function fetchPipeline(baseUrl) {
8
+ const response = await fetch(`${baseUrl}/pipeline`);
9
+ return response.json();
10
+ }
11
+ export async function fetchSessions(baseUrl) {
12
+ const response = await fetch(`${baseUrl}/sessions`);
13
+ return response.json();
14
+ }
15
+ export async function fetchMessages(baseUrl, count = 500) {
16
+ const response = await fetch(`${baseUrl}/messages?count=${count}`);
17
+ return response.json();
18
+ }
19
+ export async function fetchStats(baseUrl) {
20
+ const response = await fetch(`${baseUrl}/stats`);
21
+ return response.json();
22
+ }
23
+ export async function dispatchCommand(baseUrl, commandType, data = {}) {
24
+ const response = await fetch(`${baseUrl}/command`, {
25
+ method: 'POST',
26
+ headers: { 'Content-Type': 'application/json' },
27
+ body: JSON.stringify({ type: commandType, data }),
28
+ });
29
+ return response.json();
30
+ }
31
+ export function delay(ms) {
32
+ return new Promise((resolve) => setTimeout(resolve, ms));
33
+ }
34
+ export async function waitForPipelineCompletion(baseUrl, timeoutMs, criticalNodes = ['ExportSchema', 'GenerateServer']) {
35
+ const startTime = Date.now();
36
+ while (Date.now() - startTime < timeoutMs) {
37
+ const pipeline = await fetchPipeline(baseUrl);
38
+ const completed = criticalNodes.every((name) => {
39
+ const node = pipeline.nodes.find((n) => n.id === name || n.name === name);
40
+ return node !== undefined && (node.status === 'pass' || node.status === 'fail');
41
+ });
42
+ if (completed)
43
+ return;
44
+ await delay(500);
45
+ }
46
+ throw new Error(`Pipeline did not complete within ${timeoutMs}ms`);
47
+ }
48
+ export async function recordStatusProgression(baseUrl, timeoutMs, pollIntervalMs = 500) {
49
+ const statusHistory = [];
50
+ const startTime = Date.now();
51
+ while (Date.now() - startTime < timeoutMs) {
52
+ const pipeline = await fetchPipeline(baseUrl);
53
+ statusHistory.push({
54
+ timestamp: Date.now(),
55
+ nodes: pipeline.nodes.map((n) => ({ id: n.id, status: n.status })),
56
+ });
57
+ const allCompleted = pipeline.nodes.every((n) => n.status === 'pass' || n.status === 'fail' || n.status === 'None');
58
+ if (allCompleted && pipeline.nodes.some((n) => n.status === 'pass' || n.status === 'fail')) {
59
+ break;
60
+ }
61
+ await delay(pollIntervalMs);
62
+ }
63
+ return statusHistory;
64
+ }
65
+ export function sanitizeEventData(data) {
66
+ const sanitized = { ...data };
67
+ delete sanitized.timestamp;
68
+ delete sanitized.requestId;
69
+ delete sanitized.correlationId;
70
+ delete sanitized._frameworkChildCorrelationId;
71
+ return sanitized;
72
+ }
73
+ export function extractEventSequence(messages) {
74
+ return messages
75
+ .filter((m) => m.messageType === 'event')
76
+ .map((e) => ({
77
+ type: e.message.type,
78
+ data: sanitizeEventData(e.message.data),
79
+ position: e.position,
80
+ }));
81
+ }
82
+ export async function writeSnapshot(snapshotDir, filename, data) {
83
+ await fs.mkdir(snapshotDir, { recursive: true });
84
+ const filePath = path.join(snapshotDir, filename);
85
+ await fs.writeFile(filePath, JSON.stringify(data, null, 2));
86
+ }
87
+ export async function readSnapshot(snapshotDir, filename) {
88
+ const filePath = path.join(snapshotDir, filename);
89
+ try {
90
+ const content = await fs.readFile(filePath, 'utf-8');
91
+ return JSON.parse(content);
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
97
+ export async function createGoldenMaster(baseUrl, timeoutMs) {
98
+ const registrySnapshot = await fetchRegistry(baseUrl);
99
+ const pipelineSnapshot = await fetchPipeline(baseUrl);
100
+ const sessionsSnapshot = await fetchSessions(baseUrl);
101
+ await dispatchCommand(baseUrl, 'ExportSchema', {});
102
+ const statusProgression = await recordStatusProgression(baseUrl, timeoutMs);
103
+ const finalMessages = await fetchMessages(baseUrl, 500);
104
+ const finalPipeline = await fetchPipeline(baseUrl);
105
+ const finalStats = await fetchStats(baseUrl);
106
+ return {
107
+ baseline: {
108
+ registry: registrySnapshot,
109
+ pipeline: pipelineSnapshot,
110
+ sessions: sessionsSnapshot,
111
+ },
112
+ execution: {
113
+ statusProgression,
114
+ events: finalMessages.filter((m) => m.messageType === 'event'),
115
+ commands: finalMessages.filter((m) => m.messageType === 'command'),
116
+ },
117
+ final: {
118
+ pipeline: finalPipeline,
119
+ stats: finalStats,
120
+ },
121
+ };
122
+ }
123
+ export function groupEventsByCorrelationId(events) {
124
+ const groups = new Map();
125
+ for (const event of events) {
126
+ const correlationId = event.message.correlationId ?? 'uncorrelated';
127
+ const group = groups.get(correlationId) ?? [];
128
+ group.push(event);
129
+ groups.set(correlationId, group);
130
+ }
131
+ return groups;
132
+ }
133
+ export function extractEventTypes(events) {
134
+ return events.map((e) => e.message.type);
135
+ }
136
+ export function compareEventSets(expected, actual) {
137
+ const expectedSet = new Set(expected);
138
+ const actualSet = new Set(actual);
139
+ const missing = expected.filter((e) => !actualSet.has(e));
140
+ const extra = actual.filter((e) => !expectedSet.has(e));
141
+ return { missing, extra };
142
+ }
143
+ export function validateSequentialDependencies(events, dependencies) {
144
+ const positions = new Map();
145
+ events.forEach((e, index) => {
146
+ if (!positions.has(e.message.type)) {
147
+ positions.set(e.message.type, index);
148
+ }
149
+ });
150
+ return dependencies.every(([before, after]) => {
151
+ const beforePos = positions.get(before);
152
+ const afterPos = positions.get(after);
153
+ if (beforePos === undefined || afterPos === undefined)
154
+ return true;
155
+ return beforePos < afterPos;
156
+ });
157
+ }
158
+ export async function captureFileSnapshot(exampleDir) {
159
+ const contextDir = path.join(exampleDir, '.context');
160
+ const serverDir = path.join(exampleDir, 'server');
161
+ const clientDir = path.join(exampleDir, 'client');
162
+ const fileExists = async (filePath) => {
163
+ try {
164
+ await fs.access(filePath);
165
+ return true;
166
+ }
167
+ catch {
168
+ return false;
169
+ }
170
+ };
171
+ const listDir = async (dir) => {
172
+ try {
173
+ return await fs.readdir(dir);
174
+ }
175
+ catch {
176
+ return [];
177
+ }
178
+ };
179
+ const domainFlowsDir = path.join(serverDir, 'src', 'domain', 'flows');
180
+ const moleculesDir = path.join(clientDir, 'src', 'components', 'molecules');
181
+ const organismsDir = path.join(clientDir, 'src', 'components', 'organisms');
182
+ const pagesDir = path.join(clientDir, 'src', 'components', 'pages');
183
+ const collectSlices = async (flowsDir) => {
184
+ const flows = await listDir(flowsDir);
185
+ const allSlices = [];
186
+ for (const flow of flows) {
187
+ const slices = await listDir(path.join(flowsDir, flow));
188
+ allSlices.push(...slices.map((s) => `${flow}/${s}`));
189
+ }
190
+ return allSlices;
191
+ };
192
+ return {
193
+ contextFiles: {
194
+ exportResult: await fileExists(path.join(contextDir, '.export-result.json')),
195
+ schemaJson: await fileExists(path.join(contextDir, 'schema.json')),
196
+ schemaGraphql: await fileExists(path.join(contextDir, 'schema.graphql')),
197
+ iaScheme: await fileExists(path.join(contextDir, 'auto-ia-scheme.json')),
198
+ },
199
+ serverFiles: {
200
+ packageJson: await fileExists(path.join(serverDir, 'package.json')),
201
+ srcExists: await fileExists(path.join(serverDir, 'src')),
202
+ domainSlices: await collectSlices(domainFlowsDir),
203
+ },
204
+ clientFiles: {
205
+ packageJson: await fileExists(path.join(clientDir, 'package.json')),
206
+ srcExists: await fileExists(path.join(clientDir, 'src')),
207
+ molecules: await listDir(moleculesDir),
208
+ organisms: await listDir(organismsDir),
209
+ pages: await listDir(pagesDir),
210
+ },
211
+ };
212
+ }
213
+ export function compareFileSnapshots(expected, actual) {
214
+ const differences = [];
215
+ if (expected.contextFiles.exportResult !== actual.contextFiles.exportResult) {
216
+ differences.push('.context/.export-result.json existence mismatch');
217
+ }
218
+ if (expected.contextFiles.schemaJson !== actual.contextFiles.schemaJson) {
219
+ differences.push('.context/schema.json existence mismatch');
220
+ }
221
+ if (expected.contextFiles.schemaGraphql !== actual.contextFiles.schemaGraphql) {
222
+ differences.push('.context/schema.graphql existence mismatch');
223
+ }
224
+ if (expected.contextFiles.iaScheme !== actual.contextFiles.iaScheme) {
225
+ differences.push('.context/auto-ia-scheme.json existence mismatch');
226
+ }
227
+ if (expected.serverFiles.packageJson !== actual.serverFiles.packageJson) {
228
+ differences.push('server/package.json existence mismatch');
229
+ }
230
+ if (expected.serverFiles.srcExists !== actual.serverFiles.srcExists) {
231
+ differences.push('server/src existence mismatch');
232
+ }
233
+ const expectedSlices = new Set(expected.serverFiles.domainSlices);
234
+ const actualSlices = new Set(actual.serverFiles.domainSlices);
235
+ for (const slice of expectedSlices) {
236
+ if (!actualSlices.has(slice)) {
237
+ differences.push(`Missing server slice: ${slice}`);
238
+ }
239
+ }
240
+ for (const slice of actualSlices) {
241
+ if (!expectedSlices.has(slice)) {
242
+ differences.push(`Extra server slice: ${slice}`);
243
+ }
244
+ }
245
+ if (expected.clientFiles.packageJson !== actual.clientFiles.packageJson) {
246
+ differences.push('client/package.json existence mismatch');
247
+ }
248
+ if (expected.clientFiles.srcExists !== actual.clientFiles.srcExists) {
249
+ differences.push('client/src existence mismatch');
250
+ }
251
+ return { matches: differences.length === 0, differences };
252
+ }
253
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/__tests__/e2e/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=kanban-migration.e2e.specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanban-migration.e2e.specs.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/e2e/kanban-migration.e2e.specs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,195 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
4
+ import { PipelineServer } from '../../server/pipeline-server.js';
5
+ import { loadPipelineConfig } from '../../config/pipeline-config.js';
6
+ import { createKanbanPipeline } from '../../testing/fixtures/kanban.pipeline.js';
7
+ import { compareEventSets, dispatchCommand, extractEventSequence, extractEventTypes, fetchMessages, fetchPipeline, fetchRegistry, fetchSessions, fetchStats, readSnapshot, recordStatusProgression, validateSequentialDependencies, writeSnapshot, } from './helpers.js';
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ const SNAPSHOT_DIR = path.resolve(__dirname, '__snapshots__', 'kanban-migration');
10
+ const PIPELINE_TIMEOUT_MS = 600000;
11
+ const EXPECTED_COMMAND_HANDLERS = [
12
+ 'CheckClient',
13
+ 'CheckLint',
14
+ 'CheckTests',
15
+ 'CheckTypes',
16
+ 'CopyExample',
17
+ 'ExportSchema',
18
+ 'GenerateClient',
19
+ 'GenerateIA',
20
+ 'GenerateServer',
21
+ 'ImplementClient',
22
+ 'ImplementComponent',
23
+ 'ImplementServer',
24
+ 'ImplementSlice',
25
+ 'ImportDesignSystem',
26
+ 'StartClient',
27
+ 'StartServer',
28
+ ];
29
+ const EXPECTED_EVENT_HANDLERS = [
30
+ 'SchemaExported',
31
+ 'SliceGenerated',
32
+ 'SliceImplemented',
33
+ 'ServerGenerated',
34
+ 'IAGenerated',
35
+ 'ClientGenerated',
36
+ 'ComponentImplemented',
37
+ 'ComponentImplementationFailed',
38
+ 'ClientChecked',
39
+ ];
40
+ const SEQUENTIAL_DEPENDENCIES = [
41
+ ['SchemaExported', 'ServerGenerated'],
42
+ ['ServerGenerated', 'IAGenerated'],
43
+ ['IAGenerated', 'ClientGenerated'],
44
+ ];
45
+ describe.skip('Kanban-Todo Pipeline Migration E2E', () => {
46
+ let server;
47
+ let baseUrl;
48
+ beforeAll(async () => {
49
+ const pipeline = createKanbanPipeline();
50
+ const loaded = await loadPipelineConfig({
51
+ plugins: [
52
+ '@auto-engineer/server-checks',
53
+ '@auto-engineer/design-system-importer',
54
+ '@auto-engineer/server-generator-apollo-emmett',
55
+ '@auto-engineer/narrative',
56
+ '@auto-engineer/frontend-checks',
57
+ '@auto-engineer/frontend-implementer',
58
+ '@auto-engineer/component-implementer',
59
+ '@auto-engineer/information-architect',
60
+ '@auto-engineer/frontend-generator-react-graphql',
61
+ '@auto-engineer/server-implementer',
62
+ '@auto-engineer/dev-server',
63
+ ],
64
+ pipeline,
65
+ });
66
+ server = new PipelineServer({ port: 0 });
67
+ server.registerCommandHandlers(loaded.handlers);
68
+ server.registerPipeline(loaded.pipeline);
69
+ await server.start();
70
+ baseUrl = `http://localhost:${server.port}`;
71
+ }, 35000);
72
+ afterAll(async () => {
73
+ await server.stop();
74
+ }, 10000);
75
+ describe('Registry Parity', () => {
76
+ it('should register all expected command handlers', async () => {
77
+ const registry = await fetchRegistry(baseUrl);
78
+ for (const handler of EXPECTED_COMMAND_HANDLERS) {
79
+ expect(registry.commandHandlers).toContain(handler);
80
+ }
81
+ expect(registry.commandHandlers.length).toBe(EXPECTED_COMMAND_HANDLERS.length);
82
+ });
83
+ it('should register all expected event handlers', async () => {
84
+ const registry = await fetchRegistry(baseUrl);
85
+ for (const handler of EXPECTED_EVENT_HANDLERS) {
86
+ expect(registry.eventHandlers).toContain(handler);
87
+ }
88
+ });
89
+ it('should have no folds (using settled pattern instead)', async () => {
90
+ const registry = await fetchRegistry(baseUrl);
91
+ expect(registry.folds).toHaveLength(0);
92
+ });
93
+ });
94
+ describe('Pipeline Graph Parity', () => {
95
+ it('should have nodes for all command handlers', async () => {
96
+ const pipeline = await fetchPipeline(baseUrl);
97
+ const nodeNames = pipeline.nodes.map((n) => n.name);
98
+ for (const handler of EXPECTED_COMMAND_HANDLERS) {
99
+ expect(nodeNames).toContain(handler);
100
+ }
101
+ });
102
+ it('should have correct command-to-events mapping', async () => {
103
+ const pipeline = await fetchPipeline(baseUrl);
104
+ expect(pipeline.commandToEvents.ExportSchema).toContain('SchemaExported');
105
+ expect(pipeline.commandToEvents.GenerateServer).toContain('ServerGenerated');
106
+ expect(pipeline.commandToEvents.GenerateServer).toContain('SliceGenerated');
107
+ });
108
+ it('should have correct event-to-command mapping', async () => {
109
+ const pipeline = await fetchPipeline(baseUrl);
110
+ expect(pipeline.eventToCommand.SchemaExported).toBe('GenerateServer');
111
+ expect(pipeline.eventToCommand.ServerGenerated).toBe('GenerateIA');
112
+ expect(pipeline.eventToCommand.IAGenerated).toBe('GenerateClient');
113
+ });
114
+ });
115
+ describe('Command Dispatch', () => {
116
+ it('POST /command accepts ExportSchema and returns ack', async () => {
117
+ const ack = await dispatchCommand(baseUrl, 'ExportSchema', {});
118
+ expect(ack.status).toBe('ack');
119
+ expect(ack.commandId).toBeDefined();
120
+ expect(ack.timestamp).toBeDefined();
121
+ });
122
+ });
123
+ describe('Event Sequence Validation', () => {
124
+ it('should maintain sequential dependencies in event order', async () => {
125
+ await dispatchCommand(baseUrl, 'ExportSchema', {});
126
+ await new Promise((resolve) => setTimeout(resolve, 60000));
127
+ const messages = await fetchMessages(baseUrl);
128
+ const events = messages.filter((m) => m.messageType === 'event');
129
+ const isValid = validateSequentialDependencies(events, SEQUENTIAL_DEPENDENCIES);
130
+ expect(isValid).toBe(true);
131
+ }, 120000);
132
+ });
133
+ describe('Golden Master Comparison', () => {
134
+ it.skip('should match old CLI golden master (event types)', async () => {
135
+ const oldGoldenMaster = await readSnapshot(path.resolve(__dirname, '..', '..', '..', '..', 'cli', 'src', '__tests__', 'e2e', '__snapshots__', 'kanban-todo'), 'golden-master.snapshot.json');
136
+ if (oldGoldenMaster === null) {
137
+ throw new Error('Old golden master not found. Run CLI E2E tests first.');
138
+ }
139
+ await dispatchCommand(baseUrl, 'ExportSchema', {});
140
+ const statusProgression = await recordStatusProgression(baseUrl, PIPELINE_TIMEOUT_MS, 1000);
141
+ const finalMessages = await fetchMessages(baseUrl, 1000);
142
+ const expectedEventTypes = extractEventTypes(oldGoldenMaster.execution.events);
143
+ const actualEventTypes = extractEventTypes(finalMessages.filter((m) => m.messageType === 'event'));
144
+ const uniqueExpected = [...new Set(expectedEventTypes)];
145
+ const uniqueActual = [...new Set(actualEventTypes)];
146
+ const { missing, extra } = compareEventSets(uniqueExpected, uniqueActual);
147
+ expect(missing).toHaveLength(0);
148
+ expect(extra).toHaveLength(0);
149
+ }, PIPELINE_TIMEOUT_MS + 60000);
150
+ it.skip('should match old CLI golden master (registry)', async () => {
151
+ const oldGoldenMaster = await readSnapshot(path.resolve(__dirname, '..', '..', '..', '..', 'cli', 'src', '__tests__', 'e2e', '__snapshots__', 'kanban-todo'), 'golden-master.snapshot.json');
152
+ if (oldGoldenMaster === null) {
153
+ throw new Error('Old golden master not found. Run CLI E2E tests first.');
154
+ }
155
+ const newRegistry = await fetchRegistry(baseUrl);
156
+ expect(newRegistry.commandHandlers.sort()).toEqual(oldGoldenMaster.baseline.registry.commandHandlers.sort());
157
+ expect(newRegistry.eventHandlers.sort()).toEqual(oldGoldenMaster.baseline.registry.eventHandlers.sort());
158
+ });
159
+ });
160
+ describe('New Pipeline Snapshot Recording', () => {
161
+ it.skip('should record complete pipeline execution for comparison', async () => {
162
+ const registrySnapshot = await fetchRegistry(baseUrl);
163
+ const pipelineSnapshot = await fetchPipeline(baseUrl);
164
+ const sessionsSnapshot = await fetchSessions(baseUrl);
165
+ await dispatchCommand(baseUrl, 'ExportSchema', {});
166
+ const statusProgression = await recordStatusProgression(baseUrl, PIPELINE_TIMEOUT_MS, 1000);
167
+ const finalMessages = await fetchMessages(baseUrl, 1000);
168
+ const finalPipeline = await fetchPipeline(baseUrl);
169
+ const finalStats = await fetchStats(baseUrl);
170
+ const goldenMaster = {
171
+ baseline: {
172
+ registry: registrySnapshot,
173
+ pipeline: pipelineSnapshot,
174
+ sessions: sessionsSnapshot,
175
+ },
176
+ execution: {
177
+ statusProgression,
178
+ events: finalMessages.filter((m) => m.messageType === 'event'),
179
+ commands: finalMessages.filter((m) => m.messageType === 'command'),
180
+ },
181
+ final: {
182
+ pipeline: finalPipeline,
183
+ stats: finalStats,
184
+ },
185
+ };
186
+ await writeSnapshot(SNAPSHOT_DIR, 'golden-master.snapshot.json', goldenMaster);
187
+ await writeSnapshot(SNAPSHOT_DIR, 'registry.snapshot.json', registrySnapshot);
188
+ await writeSnapshot(SNAPSHOT_DIR, 'pipeline-graph.snapshot.json', pipelineSnapshot);
189
+ await writeSnapshot(SNAPSHOT_DIR, 'event-stream.snapshot.json', extractEventSequence(finalMessages));
190
+ expect(goldenMaster.execution.events.length).toBeGreaterThan(0);
191
+ expect(goldenMaster.execution.commands.length).toBeGreaterThan(0);
192
+ }, PIPELINE_TIMEOUT_MS + 60000);
193
+ });
194
+ });
195
+ //# sourceMappingURL=kanban-migration.e2e.specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanban-migration.e2e.specs.js","sourceRoot":"","sources":["../../../../src/__tests__/e2e/kanban-migration.e2e.specs.ts"],"names":[],"mappings":"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"}