96 lines
3.4 KiB
TypeScript
96 lines
3.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { buildTimelineItems, TimelineItemSchema } from './timeline.js';
|
|
|
|
describe('timeline contract baseline', () => {
|
|
it('builds unified timeline items across phases 1 to 3', () => {
|
|
const items = buildTimelineItems([
|
|
{
|
|
eventId: 'evt_capture_1',
|
|
eventName: 'capture.transcript.created',
|
|
occurredAt: '2026-04-03T12:00:00.000Z',
|
|
productId: 'lysnrai',
|
|
artifactId: 'art_transcript_1',
|
|
actor: { actorType: 'user', actorId: 'saravana' },
|
|
trace: { correlationId: 'corr_phase1', causationId: null, parentEventId: null },
|
|
payload: { durationMs: 42150, transcriptSource: 'microphone' },
|
|
},
|
|
{
|
|
eventId: 'evt_plan_1',
|
|
eventName: 'artifact.created',
|
|
occurredAt: '2026-04-03T13:00:00.000Z',
|
|
productId: 'flowmonk',
|
|
artifactId: 'art_plan_1',
|
|
actor: { actorType: 'agent', actorId: 'phase2-plan-exporter' },
|
|
trace: { correlationId: 'corr_phase2', causationId: null, parentEventId: null },
|
|
payload: { artifactType: 'plan', title: 'FlowMonk weekly plan', status: 'draft' },
|
|
},
|
|
{
|
|
eventId: 'evt_trail_1',
|
|
eventName: 'artifact.created',
|
|
occurredAt: '2026-04-03T14:00:00.000Z',
|
|
productId: 'actiontrail',
|
|
artifactId: 'art_trail_1',
|
|
actor: { actorType: 'agent', actorId: 'phase3-audit-importer' },
|
|
trace: {
|
|
correlationId: 'corr_phase3',
|
|
causationId: 'task_phase3',
|
|
parentEventId: 'task_phase3',
|
|
},
|
|
payload: {
|
|
artifactType: 'trail-report',
|
|
title: 'Cowork audit report for task task_phase3',
|
|
status: 'recorded',
|
|
},
|
|
},
|
|
{
|
|
eventId: 'evt_memory_1',
|
|
eventName: 'memory.entry.created',
|
|
occurredAt: '2026-04-03T14:10:00.000Z',
|
|
productId: 'mindlyst',
|
|
artifactId: 'art_memory_1',
|
|
actor: { actorType: 'agent', actorId: 'phase3-audit-note-importer' },
|
|
trace: {
|
|
correlationId: 'corr_phase3',
|
|
causationId: 'evt_note_linked_1',
|
|
parentEventId: 'evt_note_linked_1',
|
|
},
|
|
payload: {
|
|
memoryKind: 'insight',
|
|
sourceArtifactIds: ['art_note_1', 'art_trail_1'],
|
|
},
|
|
},
|
|
]);
|
|
|
|
expect(items.map(item => item.eventName)).toEqual([
|
|
'memory.entry.created',
|
|
'artifact.created',
|
|
'artifact.created',
|
|
'capture.transcript.created',
|
|
]);
|
|
expect(items[0]?.title).toBe('Insight memory proposed');
|
|
expect(items[1]?.title).toBe('Cowork audit report for task task_phase3');
|
|
expect(items[2]?.summary).toBe('plan status: draft');
|
|
expect(items[3]?.summary).toContain('microphone transcript captured');
|
|
expect(items[0]?.relatedEventIds).toEqual(['evt_note_linked_1']);
|
|
});
|
|
|
|
it('exposes a stable timeline item schema', () => {
|
|
const item = TimelineItemSchema.parse({
|
|
itemId: 'timeline_evt_1',
|
|
occurredAt: '2026-04-03T14:10:00.000Z',
|
|
eventName: 'memory.entry.created',
|
|
productId: 'mindlyst',
|
|
title: 'Insight memory proposed',
|
|
summary: '2 source artifacts linked',
|
|
artifactRefs: ['art_memory_1'],
|
|
relatedEventIds: ['evt_note_linked_1'],
|
|
actorType: 'agent',
|
|
visibility: 'private',
|
|
correlationId: 'corr_phase3',
|
|
});
|
|
|
|
expect(item.visibility).toBe('private');
|
|
expect(item.relatedEventIds).toHaveLength(1);
|
|
});
|
|
});
|