@critical-path/core 0.19.0 → 0.20.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 (44) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/domain/calendar.d.ts +13 -0
  3. package/dist/domain/calendar.d.ts.map +1 -1
  4. package/dist/domain/calendar.js +29 -0
  5. package/dist/domain/calendar.js.map +1 -1
  6. package/dist/domain/calendar.test.js +46 -1
  7. package/dist/domain/calendar.test.js.map +1 -1
  8. package/dist/domain/entities.d.ts +2 -0
  9. package/dist/domain/entities.d.ts.map +1 -1
  10. package/dist/domain/entities.js +55 -7
  11. package/dist/domain/entities.js.map +1 -1
  12. package/dist/domain/events.d.ts +28 -0
  13. package/dist/domain/events.d.ts.map +1 -1
  14. package/dist/domain/events.js.map +1 -1
  15. package/dist/domain/metrics.d.ts.map +1 -1
  16. package/dist/domain/metrics.js +14 -2
  17. package/dist/domain/metrics.js.map +1 -1
  18. package/dist/domain/task-duration.test.d.ts +2 -0
  19. package/dist/domain/task-duration.test.d.ts.map +1 -0
  20. package/dist/domain/task-duration.test.js +146 -0
  21. package/dist/domain/task-duration.test.js.map +1 -0
  22. package/dist/engine/index.d.ts +19 -1
  23. package/dist/engine/index.d.ts.map +1 -1
  24. package/dist/engine/index.js +106 -22
  25. package/dist/engine/index.js.map +1 -1
  26. package/dist/index.test.js +41 -0
  27. package/dist/index.test.js.map +1 -1
  28. package/dist/store/sqlite.d.ts.map +1 -1
  29. package/dist/store/sqlite.js +9 -5
  30. package/dist/store/sqlite.js.map +1 -1
  31. package/dist/types/index.d.ts +8 -0
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/src/domain/calendar.test.ts +53 -1
  35. package/src/domain/calendar.ts +45 -0
  36. package/src/domain/entities.ts +57 -7
  37. package/src/domain/events.ts +16 -1
  38. package/src/domain/metrics.ts +14 -2
  39. package/src/domain/task-duration.test.ts +170 -0
  40. package/src/engine/index.ts +134 -22
  41. package/src/index.test.ts +48 -0
  42. package/src/store/sqlite.ts +11 -3
  43. package/src/types/index.ts +8 -0
  44. package/tsconfig.tsbuildinfo +1 -1
@@ -374,19 +374,31 @@ export function calculateTaskMetrics(task, activities = [], timeEntries = [], op
374
374
  };
375
375
  // Compute Inferred Actuals
376
376
  let activeWorkingHours;
377
+ let calendarDurationHours;
377
378
  if (task.actualStartDate && task.actualEndDate) {
378
379
  const startMs = new Date(task.actualStartDate).getTime();
379
380
  const endMs = new Date(task.actualEndDate).getTime();
380
381
  if (!isNaN(startMs) && !isNaN(endMs) && endMs >= startMs) {
381
- activeWorkingHours = Math.round(((endMs - startMs) / (1000 * 60 * 60)) * 100) / 100;
382
+ calendarDurationHours = Math.round(((endMs - startMs) / (1000 * 60 * 60)) * 100) / 100;
382
383
  }
383
384
  }
385
+ if (task.actualDurationSeconds !== undefined) {
386
+ activeWorkingHours = Math.round((task.actualDurationSeconds / 3600) * 100) / 100;
387
+ }
388
+ else if (task.actualHours !== undefined) {
389
+ activeWorkingHours = task.actualHours;
390
+ }
391
+ else {
392
+ activeWorkingHours = calendarDurationHours;
393
+ }
384
394
  const inferredActuals = {
385
395
  actualStartDate: task.actualStartDate,
386
396
  actualEndDate: task.actualEndDate,
387
397
  isStartDateInferred: Boolean(task.actualStartDate && !task.plannedStartDate),
388
398
  isEndDateInferred: Boolean(task.actualEndDate && task.semanticStatus === 'completed'),
389
- activeWorkingHours
399
+ activeWorkingHours,
400
+ calendarDurationHours,
401
+ actualDurationSeconds: task.actualDurationSeconds
390
402
  };
391
403
  const progress = inferTaskProgress(task, options);
392
404
  const evm = calculateTaskEVM(task, { ...options, progressInference: progress });
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/domain/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/domain/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=task-duration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-duration.test.d.ts","sourceRoot":"","sources":["../../src/domain/task-duration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,146 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { TaskEntity } from './entities.js';
3
+ import { CriticalPathEngine } from '../engine/index.js';
4
+ import { InMemoryStore } from '../store/index.js';
5
+ import { DEFAULT_SOFTWARE_WORKFLOW } from '../utils/workflow.js';
6
+ describe('Task Execution Timestamps & Cumulative In-Progress Duration', () => {
7
+ it('stamps actualStartDate and inProgressSince when moving to in_progress', () => {
8
+ const task = TaskEntity.create({
9
+ projectId: 'proj_1',
10
+ title: 'Implement Task Timestamps',
11
+ status: 'todo'
12
+ });
13
+ expect(task.actualStartDate).toBeUndefined();
14
+ expect(task.actualEndDate).toBeUndefined();
15
+ expect(task.inProgressSince).toBeUndefined();
16
+ expect(task.actualDurationSeconds).toBeUndefined();
17
+ task.transitionTo('in_progress', DEFAULT_SOFTWARE_WORKFLOW);
18
+ expect(task.actualStartDate).toBeDefined();
19
+ expect(task.inProgressSince).toBeDefined();
20
+ expect(task.actualEndDate).toBeUndefined();
21
+ });
22
+ it('accumulates in-progress duration across pause/resume cycles and retains earliest actualStartDate', async () => {
23
+ vi.useFakeTimers();
24
+ try {
25
+ const now = new Date('2026-09-23T10:00:00Z');
26
+ vi.setSystemTime(now);
27
+ const task = TaskEntity.create({
28
+ projectId: 'proj_1',
29
+ title: 'Work Tracking',
30
+ status: 'todo'
31
+ });
32
+ // 1. Start working at 10:00
33
+ task.transitionTo('in_progress', DEFAULT_SOFTWARE_WORKFLOW);
34
+ const initialStartDate = task.actualStartDate;
35
+ expect(initialStartDate).toBe(now.toISOString());
36
+ expect(task.inProgressSince).toBe(now.toISOString());
37
+ // Fast-forward 30 minutes (1800s)
38
+ vi.setSystemTime(new Date('2026-09-23T10:30:00Z'));
39
+ // 2. Pause: move to todo
40
+ task.transitionTo('todo', DEFAULT_SOFTWARE_WORKFLOW);
41
+ expect(task.inProgressSince).toBeNull();
42
+ expect(task.actualDurationSeconds).toBe(1800);
43
+ expect(task.actualHours).toBe(0.5);
44
+ expect(task.actualDurationMinutes).toBe(30);
45
+ expect(task.actualStartDate).toBe(initialStartDate); // Retains earliest
46
+ // Paused for 1 hour
47
+ vi.setSystemTime(new Date('2026-09-23T11:30:00Z'));
48
+ // 3. Resume: move back to in_progress
49
+ task.transitionTo('in_progress', DEFAULT_SOFTWARE_WORKFLOW);
50
+ expect(task.actualStartDate).toBe(initialStartDate); // Still retains earliest
51
+ expect(task.inProgressSince).toBe(new Date('2026-09-23T11:30:00Z').toISOString());
52
+ expect(task.actualDurationSeconds).toBe(1800); // Unchanged until leaving
53
+ // Fast-forward another 45 minutes (2700s)
54
+ vi.setSystemTime(new Date('2026-09-23T12:15:00Z'));
55
+ // 4. Complete: move to done
56
+ task.transitionTo('done', DEFAULT_SOFTWARE_WORKFLOW);
57
+ expect(task.inProgressSince).toBeNull();
58
+ // Total duration = 1800s + 2700s = 4500s = 1.25h
59
+ expect(task.actualDurationSeconds).toBe(4500);
60
+ expect(task.actualHours).toBe(1.25);
61
+ expect(task.actualDurationMinutes).toBe(75);
62
+ expect(task.actualStartDate).toBe(initialStartDate);
63
+ expect(task.actualEndDate).toBe(new Date('2026-09-23T12:15:00Z').toISOString());
64
+ expect(task.progress).toBe(100);
65
+ // 5. Reopen: move from done to todo, then to in_progress
66
+ vi.setSystemTime(new Date('2026-09-23T14:00:00Z'));
67
+ task.transitionTo('todo', DEFAULT_SOFTWARE_WORKFLOW);
68
+ expect(task.actualEndDate).toBeUndefined(); // Reset upon reopen
69
+ expect(task.actualStartDate).toBe(initialStartDate); // Retains earliest
70
+ vi.setSystemTime(new Date('2026-09-23T14:15:00Z'));
71
+ task.transitionTo('in_progress', DEFAULT_SOFTWARE_WORKFLOW);
72
+ expect(task.actualEndDate).toBeUndefined();
73
+ expect(task.actualStartDate).toBe(initialStartDate); // Retains earliest
74
+ expect(task.inProgressSince).toBe(new Date('2026-09-23T14:15:00Z').toISOString());
75
+ }
76
+ finally {
77
+ vi.useRealTimers();
78
+ }
79
+ });
80
+ it('keeps actualDurationSeconds and actualHours synchronized on manual updates', () => {
81
+ const task = TaskEntity.create({
82
+ projectId: 'proj_1',
83
+ title: 'Manual Adjustments',
84
+ status: 'todo'
85
+ });
86
+ // Update actualDurationSeconds directly
87
+ task.update({ actualDurationSeconds: 7200 });
88
+ expect(task.actualHours).toBe(2);
89
+ expect(task.actualDurationMinutes).toBe(120);
90
+ // Update actualHours directly
91
+ task.update({ actualHours: 1.5 });
92
+ expect(task.actualDurationSeconds).toBe(5400);
93
+ expect(task.actualDurationMinutes).toBe(90);
94
+ });
95
+ it('integrates with CriticalPathEngine updateTask and metrics calculation', async () => {
96
+ vi.useFakeTimers();
97
+ try {
98
+ const store = new InMemoryStore();
99
+ const engine = new CriticalPathEngine({ store });
100
+ const project = await engine.createProject({ name: 'Engine Duration Test' });
101
+ vi.setSystemTime(new Date('2026-09-23T09:00:00Z'));
102
+ const task = await engine.createTask({
103
+ projectId: project.id,
104
+ title: 'Build Feature',
105
+ estimatedHours: 8
106
+ });
107
+ // 1. Move to in_progress
108
+ const started = await engine.updateTask(task.id, { status: 'in_progress' });
109
+ expect(started?.actualStartDate).toBe('2026-09-23T09:00:00.000Z');
110
+ expect(started?.inProgressSince).toBe('2026-09-23T09:00:00.000Z');
111
+ expect(started?.actualEndDate).toBeUndefined();
112
+ // 2. Work for 2 hours (7200s), then move to todo (pause)
113
+ vi.setSystemTime(new Date('2026-09-23T11:00:00Z'));
114
+ const paused = await engine.updateTask(task.id, { status: 'todo' });
115
+ expect(paused?.inProgressSince).toBeNull();
116
+ expect(paused?.actualDurationSeconds).toBe(7200);
117
+ expect(paused?.actualHours).toBe(2);
118
+ // 3. Complete task at 14:00 (move from todo to done)
119
+ vi.setSystemTime(new Date('2026-09-23T14:00:00Z'));
120
+ const completed = await engine.updateTask(task.id, { status: 'done' });
121
+ expect(completed?.actualEndDate).toBe('2026-09-23T14:00:00.000Z');
122
+ // in-progress duration should still be 7200s (since time in todo was paused)
123
+ expect(completed?.actualDurationSeconds).toBe(7200);
124
+ // 4. Verify metrics calculation
125
+ const metrics = await engine.getTaskMetrics(task.id);
126
+ expect(metrics?.inferredActuals.actualDurationSeconds).toBe(7200);
127
+ expect(metrics?.inferredActuals.activeWorkingHours).toBe(2);
128
+ // Calendar duration: 09:00 to 14:00 = 5.0 hours
129
+ expect(metrics?.inferredActuals.calendarDurationHours).toBe(5);
130
+ // 5. Reopen task (done -> todo -> in_progress): actualEndDate must be cleared (undefined)
131
+ vi.setSystemTime(new Date('2026-09-23T15:00:00Z'));
132
+ const reopenedTodo = await engine.updateTask(task.id, { status: 'todo' });
133
+ expect(reopenedTodo?.actualEndDate).toBeUndefined();
134
+ vi.setSystemTime(new Date('2026-09-23T15:30:00Z'));
135
+ const reopenedProgress = await engine.updateTask(task.id, { status: 'in_progress' });
136
+ expect(reopenedProgress?.actualEndDate).toBeUndefined();
137
+ expect(reopenedProgress?.actualStartDate).toBe('2026-09-23T09:00:00.000Z'); // Earliest preserved
138
+ expect(reopenedProgress?.inProgressSince).toBe('2026-09-23T15:30:00.000Z');
139
+ expect(reopenedProgress?.actualDurationSeconds).toBe(7200);
140
+ }
141
+ finally {
142
+ vi.useRealTimers();
143
+ }
144
+ });
145
+ });
146
+ //# sourceMappingURL=task-duration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-duration.test.js","sourceRoot":"","sources":["../../src/domain/task-duration.test.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,25 @@ export declare class CriticalPathEngine {
29
29
  getTasks(projectId?: string): Promise<Task[]>;
30
30
  getTask(id: string): Promise<Task | null>;
31
31
  createTask(taskInput: CreateTaskInput): Promise<Task>;
32
- updateTask(id: string, updates: Partial<Task>): Promise<Task | null>;
32
+ updateTask(id: string, updates: Partial<Task> & {
33
+ actorId?: string;
34
+ actorName?: string;
35
+ actorType?: string;
36
+ actor?: {
37
+ userId: string;
38
+ username?: string;
39
+ actorType?: string;
40
+ };
41
+ }, options?: {
42
+ actorId?: string;
43
+ actorName?: string;
44
+ actorType?: string;
45
+ actor?: {
46
+ userId: string;
47
+ username?: string;
48
+ actorType?: string;
49
+ };
50
+ }): Promise<Task | null>;
33
51
  private checkAndUnblockDownstreamTasks;
34
52
  deleteTask(id: string): Promise<boolean>;
35
53
  addDependency(dep: Omit<TaskDependency, 'id'>): Promise<TaskDependency>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
@@ -264,6 +264,7 @@ export class CriticalPathEngine {
264
264
  const statusDef = resolveStatusDefinition(initialStatus, project?.statusDefinitions || workflow?.statuses);
265
265
  const semanticStatus = processedInput.semanticStatus ?? taskInput.semanticStatus ?? statusDef.category;
266
266
  const actualStartDate = processedInput.actualStartDate ?? taskInput.actualStartDate ?? (statusDef.category === 'in_progress' ? now : undefined);
267
+ const inProgressSince = processedInput.inProgressSince ?? taskInput.inProgressSince ?? (statusDef.category === 'in_progress' ? now : undefined);
267
268
  const actualEndDate = processedInput.actualEndDate ?? taskInput.actualEndDate ?? ((statusDef.category === 'completed' || statusDef.category === 'canceled') ? now : undefined);
268
269
  const created = await this.store.createTask({
269
270
  projectId,
@@ -292,6 +293,8 @@ export class CriticalPathEngine {
292
293
  estimatedDurationMinutes: processedInput.estimatedDurationMinutes ?? taskInput.estimatedDurationMinutes,
293
294
  actualDurationMinutes: processedInput.actualDurationMinutes ?? taskInput.actualDurationMinutes,
294
295
  billableDurationMinutes: processedInput.billableDurationMinutes ?? taskInput.billableDurationMinutes,
296
+ actualDurationSeconds: processedInput.actualDurationSeconds ?? taskInput.actualDurationSeconds,
297
+ inProgressSince,
295
298
  progress: processedInput.progress ?? taskInput.progress ?? (statusDef.category === 'completed' ? 100 : 0),
296
299
  tags: processedInput.tags ?? taskInput.tags ?? [],
297
300
  customFields: processedInput.customFields ?? taskInput.customFields ?? {},
@@ -318,41 +321,93 @@ export class CriticalPathEngine {
318
321
  this.dispatchWebhook('task.created', { task: created });
319
322
  return created;
320
323
  }
321
- async updateTask(id, updates) {
324
+ async updateTask(id, updates, options) {
322
325
  const existing = await this.store.getTask(id);
323
326
  if (!existing)
324
327
  return null;
328
+ const actorId = options?.actorId ||
329
+ updates.actorId ||
330
+ options?.actor?.userId ||
331
+ updates.actor?.userId ||
332
+ 'system';
333
+ const actorName = options?.actorName ||
334
+ updates.actorName ||
335
+ options?.actor?.username ||
336
+ updates.actor?.username ||
337
+ (actorId === 'system' ? 'System' : undefined);
338
+ const actorType = options?.actorType ||
339
+ updates.actorType ||
340
+ options?.actor?.actorType ||
341
+ updates.actor?.actorType ||
342
+ (actorId === 'system' ? 'system' : 'user');
343
+ const actorObj = options?.actor || updates.actor || {
344
+ userId: actorId,
345
+ username: actorName,
346
+ actorType
347
+ };
348
+ const { actorId: _aId, actorName: _aName, actorType: _aType, actor: _aObj, ...taskUpdates } = updates;
325
349
  const project = await this.store.getProject(existing.projectId);
326
350
  const workflow = await this.resolveProjectWorkflow(existing.projectId);
327
351
  // Validate workflow transition invariant
328
- if (updates.status && updates.status !== existing.status) {
329
- const isValid = validateTransition(workflow || undefined, existing.status, updates.status);
352
+ if (taskUpdates.status && taskUpdates.status !== existing.status) {
353
+ const isValid = validateTransition(workflow || undefined, existing.status, taskUpdates.status);
330
354
  if (!isValid) {
331
- throw new WorkflowValidationError(existing.status, updates.status, workflow?.id);
355
+ throw new WorkflowValidationError(existing.status, taskUpdates.status, workflow?.id);
332
356
  }
333
357
  }
334
358
  // Validate custom field invariants
335
- if (project?.customFieldDefinitions && updates.customFields) {
359
+ if (project?.customFieldDefinitions && taskUpdates.customFields) {
336
360
  validateCustomFieldValues(project.customFieldDefinitions, {
337
361
  ...existing.customFields,
338
- ...updates.customFields
362
+ ...taskUpdates.customFields
339
363
  });
340
364
  }
341
- const processedUpdates = await this.plugins.runBeforeTaskUpdate(id, updates);
365
+ const processedUpdates = await this.plugins.runBeforeTaskUpdate(id, taskUpdates);
342
366
  // Auto-update execution/completion timestamps if status changes
343
367
  if (processedUpdates.status && processedUpdates.status !== existing.status) {
344
368
  const statusDef = resolveStatusDefinition(processedUpdates.status, project?.statusDefinitions || workflow?.statuses);
345
369
  processedUpdates.semanticStatus = processedUpdates.semanticStatus ?? statusDef.category;
346
370
  const now = new Date().toISOString();
347
371
  const existingStatusDef = resolveStatusDefinition(existing.status, project?.statusDefinitions || workflow?.statuses);
348
- if ((existingStatusDef.category === 'completed' || existingStatusDef.category === 'canceled') &&
349
- (statusDef.category === 'in_progress' || statusDef.category === 'not_started') &&
372
+ // 1. Leaving in_progress: finalize active session duration
373
+ if (existingStatusDef.category === 'in_progress' && statusDef.category !== 'in_progress') {
374
+ const inProgressSince = existing.inProgressSince;
375
+ if (inProgressSince) {
376
+ const startMs = new Date(inProgressSince).getTime();
377
+ const endMs = new Date(now).getTime();
378
+ if (!isNaN(startMs) && !isNaN(endMs) && endMs >= startMs) {
379
+ const sessionSeconds = Math.max(0, (endMs - startMs) / 1000);
380
+ processedUpdates.actualDurationSeconds =
381
+ (processedUpdates.actualDurationSeconds ?? existing.actualDurationSeconds ?? 0) + sessionSeconds;
382
+ if (processedUpdates.actualHours === undefined) {
383
+ processedUpdates.actualHours = Math.round((processedUpdates.actualDurationSeconds / 3600) * 100) / 100;
384
+ }
385
+ if (processedUpdates.actualDurationMinutes === undefined) {
386
+ processedUpdates.actualDurationMinutes = Math.round(processedUpdates.actualDurationSeconds / 60);
387
+ }
388
+ }
389
+ processedUpdates.inProgressSince = null;
390
+ }
391
+ }
392
+ // 2. Entering in_progress: retain earliest start date & start session timer
393
+ if (statusDef.category === 'in_progress') {
394
+ if (!existing.actualStartDate && !processedUpdates.actualStartDate) {
395
+ processedUpdates.actualStartDate = now;
396
+ }
397
+ if (!processedUpdates.inProgressSince) {
398
+ processedUpdates.inProgressSince = now;
399
+ }
400
+ if ((existingStatusDef.category === 'completed' || existingStatusDef.category === 'canceled') &&
401
+ processedUpdates.actualEndDate === undefined) {
402
+ processedUpdates.actualEndDate = undefined;
403
+ }
404
+ }
405
+ else if ((existingStatusDef.category === 'completed' || existingStatusDef.category === 'canceled') &&
406
+ statusDef.category === 'not_started' &&
350
407
  processedUpdates.actualEndDate === undefined) {
351
408
  processedUpdates.actualEndDate = undefined;
352
409
  }
353
- if (statusDef.category === 'in_progress' && !existing.actualStartDate && !processedUpdates.actualStartDate) {
354
- processedUpdates.actualStartDate = now;
355
- }
410
+ // 3. Entering completed or canceled
356
411
  if ((statusDef.category === 'completed' || statusDef.category === 'canceled') && !processedUpdates.actualEndDate) {
357
412
  processedUpdates.actualEndDate = now;
358
413
  if (statusDef.category === 'completed' && processedUpdates.progress === undefined && (existing.progress || 0) < 100) {
@@ -360,6 +415,19 @@ export class CriticalPathEngine {
360
415
  }
361
416
  }
362
417
  }
418
+ // Mutual sync for manual duration/effort edits
419
+ if (processedUpdates.actualDurationSeconds !== undefined && processedUpdates.actualHours === undefined) {
420
+ processedUpdates.actualHours = Math.round((processedUpdates.actualDurationSeconds / 3600) * 100) / 100;
421
+ if (processedUpdates.actualDurationMinutes === undefined) {
422
+ processedUpdates.actualDurationMinutes = Math.round(processedUpdates.actualDurationSeconds / 60);
423
+ }
424
+ }
425
+ else if (processedUpdates.actualHours !== undefined && processedUpdates.actualDurationSeconds === undefined) {
426
+ processedUpdates.actualDurationSeconds = Math.round(processedUpdates.actualHours * 3600);
427
+ if (processedUpdates.actualDurationMinutes === undefined) {
428
+ processedUpdates.actualDurationMinutes = Math.round(processedUpdates.actualHours * 60);
429
+ }
430
+ }
363
431
  const updated = await this.store.updateTask(id, processedUpdates);
364
432
  if (!updated)
365
433
  return null;
@@ -377,7 +445,10 @@ export class CriticalPathEngine {
377
445
  payload: {
378
446
  task: updated,
379
447
  previousStatus: existing.status,
380
- newStatus: updated.status
448
+ newStatus: updated.status,
449
+ actorId,
450
+ ...(actorName ? { actorName } : {}),
451
+ actor: actorObj
381
452
  }
382
453
  };
383
454
  await this.events.publish(statusEvent);
@@ -395,7 +466,10 @@ export class CriticalPathEngine {
395
466
  occurredAt: now,
396
467
  payload: {
397
468
  task: updated,
398
- previous: existing
469
+ previous: existing,
470
+ actorId,
471
+ ...(actorName ? { actorName } : {}),
472
+ actor: actorObj
399
473
  }
400
474
  };
401
475
  await this.events.publish(updateEvent);
@@ -412,16 +486,19 @@ export class CriticalPathEngine {
412
486
  occurredAt: now,
413
487
  payload: {
414
488
  task: updated,
415
- reason: blockedReason
489
+ reason: blockedReason,
490
+ actorId,
491
+ ...(actorName ? { actorName } : {}),
492
+ actor: actorObj
416
493
  }
417
494
  };
418
495
  await this.events.publish(blockedEvent);
419
496
  await this.store.logActivity({
420
497
  projectId: updated.projectId,
421
498
  taskId: updated.id,
422
- actorId: updated.assigneeId || 'system',
499
+ actorId,
423
500
  action: 'task.blocked',
424
- details: { reason: blockedReason }
501
+ details: { reason: blockedReason, ...(actorName ? { actorName } : {}) }
425
502
  });
426
503
  this.dispatchWebhook('task.blocked', {
427
504
  task: updated,
@@ -436,16 +513,19 @@ export class CriticalPathEngine {
436
513
  aggregateType: 'Task',
437
514
  occurredAt: now,
438
515
  payload: {
439
- task: updated
516
+ task: updated,
517
+ actorId,
518
+ ...(actorName ? { actorName } : {}),
519
+ actor: actorObj
440
520
  }
441
521
  };
442
522
  await this.events.publish(unblockedEvent);
443
523
  await this.store.logActivity({
444
524
  projectId: updated.projectId,
445
525
  taskId: updated.id,
446
- actorId: updated.assigneeId || 'system',
526
+ actorId,
447
527
  action: 'task.unblocked',
448
- details: {}
528
+ details: { ...(actorName ? { actorName } : {}) }
449
529
  });
450
530
  this.dispatchWebhook('task.unblocked', {
451
531
  task: updated
@@ -454,9 +534,13 @@ export class CriticalPathEngine {
454
534
  await this.store.logActivity({
455
535
  projectId: updated.projectId,
456
536
  taskId: updated.id,
457
- actorId: updated.assigneeId || 'system',
537
+ actorId,
458
538
  action: isStatusChange ? 'task.status_changed' : 'task.updated',
459
- details: { fromStatus: existing.status, toStatus: updated.status }
539
+ details: {
540
+ fromStatus: existing.status,
541
+ toStatus: updated.status,
542
+ ...(actorName ? { actorName } : {})
543
+ }
460
544
  });
461
545
  this.dispatchWebhook(isStatusChange ? 'task.status_changed' : 'task.updated', {
462
546
  task: updated,