@critical-path/core 0.17.0 → 0.19.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 (71) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +71 -0
  3. package/dist/domain/calendar.d.ts +53 -0
  4. package/dist/domain/calendar.d.ts.map +1 -0
  5. package/dist/domain/calendar.js +333 -0
  6. package/dist/domain/calendar.js.map +1 -0
  7. package/dist/domain/calendar.test.d.ts +2 -0
  8. package/dist/domain/calendar.test.d.ts.map +1 -0
  9. package/dist/domain/calendar.test.js +136 -0
  10. package/dist/domain/calendar.test.js.map +1 -0
  11. package/dist/domain/cpm.d.ts +8 -3
  12. package/dist/domain/cpm.d.ts.map +1 -1
  13. package/dist/domain/cpm.js +36 -3
  14. package/dist/domain/cpm.js.map +1 -1
  15. package/dist/domain/cpm.test.js +53 -0
  16. package/dist/domain/cpm.test.js.map +1 -1
  17. package/dist/domain/events.d.ts +10 -2
  18. package/dist/domain/events.d.ts.map +1 -1
  19. package/dist/domain/events.js.map +1 -1
  20. package/dist/domain/index.d.ts +2 -0
  21. package/dist/domain/index.d.ts.map +1 -1
  22. package/dist/domain/index.js +2 -0
  23. package/dist/domain/index.js.map +1 -1
  24. package/dist/domain/ladder.d.ts +3 -2
  25. package/dist/domain/ladder.d.ts.map +1 -1
  26. package/dist/domain/ladder.js +21 -3
  27. package/dist/domain/ladder.js.map +1 -1
  28. package/dist/domain/metrics.test.js +5 -4
  29. package/dist/domain/metrics.test.js.map +1 -1
  30. package/dist/domain/workload.d.ts +10 -0
  31. package/dist/domain/workload.d.ts.map +1 -0
  32. package/dist/domain/workload.js +392 -0
  33. package/dist/domain/workload.js.map +1 -0
  34. package/dist/domain/workload.test.d.ts +2 -0
  35. package/dist/domain/workload.test.d.ts.map +1 -0
  36. package/dist/domain/workload.test.js +261 -0
  37. package/dist/domain/workload.test.js.map +1 -0
  38. package/dist/engine/index.d.ts +5 -2
  39. package/dist/engine/index.d.ts.map +1 -1
  40. package/dist/engine/index.js +83 -3
  41. package/dist/engine/index.js.map +1 -1
  42. package/dist/store/sqlite.d.ts.map +1 -1
  43. package/dist/store/sqlite.js +9 -3
  44. package/dist/store/sqlite.js.map +1 -1
  45. package/dist/store/sqlite.test.js +15 -1
  46. package/dist/store/sqlite.test.js.map +1 -1
  47. package/dist/task-state.test.js +49 -0
  48. package/dist/task-state.test.js.map +1 -1
  49. package/dist/types/index.d.ts +81 -1
  50. package/dist/types/index.d.ts.map +1 -1
  51. package/dist/utils/status.d.ts.map +1 -1
  52. package/dist/utils/status.js +5 -2
  53. package/dist/utils/status.js.map +1 -1
  54. package/package.json +1 -1
  55. package/src/domain/calendar.test.ts +164 -0
  56. package/src/domain/calendar.ts +457 -0
  57. package/src/domain/cpm.test.ts +61 -0
  58. package/src/domain/cpm.ts +47 -4
  59. package/src/domain/events.ts +11 -1
  60. package/src/domain/index.ts +2 -0
  61. package/src/domain/ladder.ts +25 -4
  62. package/src/domain/metrics.test.ts +6 -4
  63. package/src/domain/workload.test.ts +311 -0
  64. package/src/domain/workload.ts +457 -0
  65. package/src/engine/index.ts +103 -5
  66. package/src/store/sqlite.test.ts +17 -1
  67. package/src/store/sqlite.ts +11 -1
  68. package/src/task-state.test.ts +60 -1
  69. package/src/types/index.ts +89 -0
  70. package/src/utils/status.ts +7 -2
  71. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,261 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { calculateWorkloadDistribution } from './workload.js';
3
+ import { CriticalPathEngine } from '../engine/index.js';
4
+ import { InMemoryStore } from '../store/index.js';
5
+ describe('calculateWorkloadDistribution', () => {
6
+ const users = [
7
+ { id: 'u1', name: 'Alice', email: 'alice@example.com', role: 'contributor', weeklyCapacityHours: 35, createdAt: '2026-09-01' },
8
+ { id: 'u2', name: 'Bob', email: 'bob@example.com', role: 'contributor', weeklyCapacityHours: 40, createdAt: '2026-09-01' }
9
+ ];
10
+ const teams = [
11
+ { id: 'team_frontend', name: 'Frontend', memberIds: ['u1'], createdAt: '2026-09-01', updatedAt: '2026-09-01' },
12
+ { id: 'team_backend', name: 'Backend', memberIds: ['u2'], weeklyCapacityHours: 50, createdAt: '2026-09-01', updatedAt: '2026-09-01' }
13
+ ];
14
+ it('aggregates logged time entries accurately by assignee across weekly buckets', () => {
15
+ const tasks = [
16
+ {
17
+ id: 't1',
18
+ projectId: 'p1',
19
+ title: 'Task 1',
20
+ status: 'in_progress',
21
+ priority: 'high',
22
+ assigneeId: 'u1',
23
+ createdAt: '2026-09-01',
24
+ updatedAt: '2026-09-01'
25
+ }
26
+ ];
27
+ const timeEntries = [
28
+ { id: 'te1', taskId: 't1', userId: 'u1', hours: 4.5, loggedAt: '2026-09-08' },
29
+ { id: 'te2', taskId: 't1', userId: 'u1', hours: 3.5, loggedAt: '2026-09-09' },
30
+ { id: 'te3', taskId: 't1', userId: 'u2', hours: 6.0, loggedAt: '2026-09-15' }
31
+ ];
32
+ const result = calculateWorkloadDistribution({ tasks, timeEntries, users, teams }, {
33
+ startDate: '2026-09-07',
34
+ endDate: '2026-09-21',
35
+ interval: 'week',
36
+ groupBy: 'assignee',
37
+ metric: 'logged'
38
+ });
39
+ expect(result.interval).toBe('week');
40
+ expect(result.groupBy).toBe('assignee');
41
+ expect(result.metric).toBe('logged');
42
+ expect(result.seriesKeys).toContain('u1');
43
+ expect(result.seriesKeys).toContain('u2');
44
+ expect(result.seriesLabels.u1).toBe('Alice');
45
+ expect(result.seriesLabels.u2).toBe('Bob');
46
+ // Week 1: 2026-09-07 (contains 09-08 and 09-09)
47
+ const week1 = result.buckets.find((b) => b.date === '2026-09-07');
48
+ expect(week1).toBeDefined();
49
+ expect(week1?.values.u1).toBe(8.0);
50
+ expect(week1?.values.u2).toBe(0);
51
+ expect(week1?.totalHours).toBe(8.0);
52
+ expect(week1?.capacity?.u1).toBe(35);
53
+ expect(week1?.capacity?.u2).toBe(40);
54
+ // Week 2: 2026-09-14 (contains 09-15)
55
+ const week2 = result.buckets.find((b) => b.date === '2026-09-14');
56
+ expect(week2).toBeDefined();
57
+ expect(week2?.values.u2).toBe(6.0);
58
+ expect(week2?.values.u1).toBe(0);
59
+ expect(week2?.totalHours).toBe(6.0);
60
+ // Total
61
+ expect(result.totalHours).toBe(14.0);
62
+ });
63
+ it('distributes scheduled estimated hours evenly across task duration', () => {
64
+ const tasks = [
65
+ {
66
+ id: 't1',
67
+ projectId: 'p1',
68
+ title: 'Multi-day Task',
69
+ status: 'todo',
70
+ priority: 'high',
71
+ assigneeId: 'u1',
72
+ estimatedHours: 40,
73
+ plannedStartDate: '2026-09-07', // Monday
74
+ dueDate: '2026-09-11', // Friday (5 days total = 8h/day)
75
+ createdAt: '2026-09-01',
76
+ updatedAt: '2026-09-01'
77
+ }
78
+ ];
79
+ const result = calculateWorkloadDistribution({ tasks, users }, {
80
+ startDate: '2026-09-07',
81
+ endDate: '2026-09-11',
82
+ interval: 'day',
83
+ groupBy: 'assignee',
84
+ metric: 'scheduled'
85
+ });
86
+ expect(result.buckets.length).toBe(5);
87
+ for (const b of result.buckets) {
88
+ expect(b.values.u1).toBe(8);
89
+ expect(b.totalHours).toBe(8);
90
+ expect(b.capacity?.u1).toBe(7); // 35 / 5 = 7h/day
91
+ }
92
+ expect(result.totalHours).toBe(40);
93
+ });
94
+ it('handles grouping by team with custom team capacity and unassigned tasks', () => {
95
+ const tasks = [
96
+ {
97
+ id: 't1',
98
+ projectId: 'p1',
99
+ title: 'Frontend Task',
100
+ status: 'in_progress',
101
+ priority: 'medium',
102
+ teamId: 'team_frontend',
103
+ estimatedHours: 20,
104
+ plannedStartDate: '2026-09-07',
105
+ dueDate: '2026-09-07',
106
+ createdAt: '2026-09-01',
107
+ updatedAt: '2026-09-01'
108
+ },
109
+ {
110
+ id: 't2',
111
+ projectId: 'p1',
112
+ title: 'Unassigned Task',
113
+ status: 'todo',
114
+ priority: 'low',
115
+ estimatedHours: 10,
116
+ plannedStartDate: '2026-09-07',
117
+ dueDate: '2026-09-07',
118
+ createdAt: '2026-09-01',
119
+ updatedAt: '2026-09-01'
120
+ }
121
+ ];
122
+ const result = calculateWorkloadDistribution({ tasks, teams }, {
123
+ startDate: '2026-09-07',
124
+ endDate: '2026-09-13',
125
+ interval: 'week',
126
+ groupBy: 'team',
127
+ metric: 'scheduled'
128
+ });
129
+ expect(result.seriesKeys).toContain('team_frontend');
130
+ expect(result.seriesKeys).toContain('unassigned');
131
+ expect(result.seriesLabels.team_frontend).toBe('Frontend');
132
+ expect(result.seriesLabels.unassigned).toBe('Unassigned');
133
+ const bucket = result.buckets[0];
134
+ expect(bucket.values.team_frontend).toBe(20);
135
+ expect(bucket.values.unassigned).toBe(10);
136
+ expect(bucket.totalHours).toBe(30);
137
+ });
138
+ it('calculates streamgraph-ready tabular structure without gaps for D3 stack', () => {
139
+ const tasks = [
140
+ {
141
+ id: 't1',
142
+ projectId: 'p1',
143
+ title: 'Task A',
144
+ status: 'done',
145
+ priority: 'high',
146
+ assigneeId: 'u1',
147
+ createdAt: '2026-09-01',
148
+ updatedAt: '2026-09-01'
149
+ }
150
+ ];
151
+ const timeEntries = [
152
+ { id: 'te1', taskId: 't1', userId: 'u1', hours: 5, loggedAt: '2026-09-01' },
153
+ { id: 'te2', taskId: 't1', userId: 'u2', hours: 8, loggedAt: '2026-09-08' }
154
+ ];
155
+ const result = calculateWorkloadDistribution({ tasks, timeEntries, users }, {
156
+ startDate: '2026-09-01',
157
+ endDate: '2026-09-14',
158
+ interval: 'week',
159
+ groupBy: 'assignee',
160
+ metric: 'logged'
161
+ });
162
+ // Verify all buckets contain numerical values (0, not undefined) for every series key
163
+ for (const bucket of result.buckets) {
164
+ for (const key of result.seriesKeys) {
165
+ expect(typeof bucket.values[key]).toBe('number');
166
+ expect(bucket.values[key]).toBeGreaterThanOrEqual(0);
167
+ }
168
+ }
169
+ });
170
+ it('integrates with CriticalPathEngine.getWorkloadDistribution', async () => {
171
+ const store = new InMemoryStore();
172
+ const engine = new CriticalPathEngine({ store });
173
+ const project = await engine.createProject({ name: 'Workload Project' });
174
+ const task = await engine.createTask({
175
+ projectId: project.id,
176
+ title: 'Dev Task',
177
+ status: 'in_progress',
178
+ assigneeId: 'u1',
179
+ estimatedHours: 15,
180
+ plannedStartDate: '2026-09-07',
181
+ dueDate: '2026-09-07'
182
+ });
183
+ await engine.logTime({
184
+ taskId: task.id,
185
+ userId: 'u1',
186
+ hours: 5,
187
+ loggedAt: '2026-09-07T10:00:00.000Z'
188
+ });
189
+ const distribution = await engine.getWorkloadDistribution(project.id, {
190
+ startDate: '2026-09-07',
191
+ endDate: '2026-09-13',
192
+ interval: 'week',
193
+ metric: 'blended'
194
+ });
195
+ expect(distribution.projectId).toBe(project.id);
196
+ expect(distribution.totalHours).toBeGreaterThan(0);
197
+ expect(distribution.buckets.length).toBeGreaterThan(0);
198
+ expect(distribution.seriesKeys).toContain('u1');
199
+ });
200
+ it('distributes task effort only on working days and reduces capacity on holidays', () => {
201
+ // Friday 2026-09-18 to Tuesday 2026-09-22 (5 calendar days: Fri, Sat, Sun, Mon, Tue)
202
+ // Monday 2026-09-21 is a Holiday!
203
+ // Active working days: Friday 2026-09-18 and Tuesday 2026-09-22 (2 days total)
204
+ // 16 estimated hours should be divided into 8h on Fri, 0h on Sat, 0h on Sun, 0h on Mon, 8h on Tue!
205
+ const customSchedule = {
206
+ name: 'Holiday Calendar',
207
+ defaultHoursPerDay: 8,
208
+ days: [
209
+ { dayOfWeek: 0, isWorkingDay: false },
210
+ { dayOfWeek: 1, isWorkingDay: true, hours: [{ start: '09:00', end: '17:00' }] },
211
+ { dayOfWeek: 2, isWorkingDay: true, hours: [{ start: '09:00', end: '17:00' }] },
212
+ { dayOfWeek: 3, isWorkingDay: true, hours: [{ start: '09:00', end: '17:00' }] },
213
+ { dayOfWeek: 4, isWorkingDay: true, hours: [{ start: '09:00', end: '17:00' }] },
214
+ { dayOfWeek: 5, isWorkingDay: true, hours: [{ start: '09:00', end: '17:00' }] },
215
+ { dayOfWeek: 6, isWorkingDay: false }
216
+ ],
217
+ holidays: [{ date: '2026-09-21', name: 'Monday Holiday' }]
218
+ };
219
+ const tasks = [
220
+ {
221
+ id: 't_holiday',
222
+ projectId: 'p1',
223
+ title: 'Holiday Spanning Task',
224
+ status: 'todo',
225
+ priority: 'high',
226
+ assigneeId: 'u2',
227
+ estimatedHours: 16,
228
+ plannedStartDate: '2026-09-18', // Friday
229
+ dueDate: '2026-09-22', // Tuesday
230
+ createdAt: '2026-09-01',
231
+ updatedAt: '2026-09-01'
232
+ }
233
+ ];
234
+ const result = calculateWorkloadDistribution({ tasks, users }, {
235
+ startDate: '2026-09-18',
236
+ endDate: '2026-09-22',
237
+ interval: 'day',
238
+ groupBy: 'assignee',
239
+ metric: 'scheduled',
240
+ schedule: customSchedule
241
+ });
242
+ const fri = result.buckets.find((b) => b.date === '2026-09-18');
243
+ const sat = result.buckets.find((b) => b.date === '2026-09-19');
244
+ const sun = result.buckets.find((b) => b.date === '2026-09-20');
245
+ const mon = result.buckets.find((b) => b.date === '2026-09-21');
246
+ const tue = result.buckets.find((b) => b.date === '2026-09-22');
247
+ expect(fri?.values.u2).toBe(8);
248
+ expect(fri?.capacity?.u2).toBe(8);
249
+ expect(sat?.values.u2).toBe(0);
250
+ expect(sat?.capacity?.u2).toBe(0);
251
+ expect(sun?.values.u2).toBe(0);
252
+ expect(sun?.capacity?.u2).toBe(0);
253
+ // Monday is holiday: 0 scheduled effort, 0 capacity
254
+ expect(mon?.values.u2).toBe(0);
255
+ expect(mon?.capacity?.u2).toBe(0);
256
+ expect(tue?.values.u2).toBe(8);
257
+ expect(tue?.capacity?.u2).toBe(8);
258
+ expect(result.totalHours).toBe(16);
259
+ });
260
+ });
261
+ //# sourceMappingURL=workload.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workload.test.js","sourceRoot":"","sources":["../../src/domain/workload.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,MAAM,KAAK,GAAW;QACpB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;QAC9H,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;KAC3H,CAAC;IAEF,MAAM,KAAK,GAAW;QACpB,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE;QAC9G,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE;KACtI,CAAC;IAEF,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,KAAK,GAAW;YACpB;gBACE,EAAE,EAAE,IAAI;gBACR,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,YAAY;aACxB;SACF,CAAC;QAEF,MAAM,WAAW,GAAgB;YAC/B,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE;YAC7E,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE;YAC7E,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE;SAC9E,CAAC;QAEF,MAAM,MAAM,GAAG,6BAA6B,CAC1C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EACpC;YACE,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,QAAQ;SACjB,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,gDAAgD;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAErC,sCAAsC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpC,QAAQ;QACR,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,KAAK,GAAW;YACpB;gBACE,EAAE,EAAE,IAAI;gBACR,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,EAAE;gBAClB,gBAAgB,EAAE,YAAY,EAAE,SAAS;gBACzC,OAAO,EAAE,YAAY,EAAE,iCAAiC;gBACxD,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,YAAY;aACxB;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,6BAA6B,CAC1C,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB;YACE,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,WAAW;SACpB,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;QACpD,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,KAAK,GAAW;YACpB;gBACE,EAAE,EAAE,IAAI;gBACR,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,eAAe;gBACtB,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,eAAe;gBACvB,cAAc,EAAE,EAAE;gBAClB,gBAAgB,EAAE,YAAY;gBAC9B,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,YAAY;aACxB;YACD;gBACE,EAAE,EAAE,IAAI;gBACR,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,iBAAiB;gBACxB,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,KAAK;gBACf,cAAc,EAAE,EAAE;gBAClB,gBAAgB,EAAE,YAAY;gBAC9B,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,YAAY;aACxB;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,6BAA6B,CAC1C,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB;YACE,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,WAAW;SACpB,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,KAAK,GAAW;YACpB;gBACE,EAAE,EAAE,IAAI;gBACR,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,YAAY;aACxB;SACF,CAAC;QAEF,MAAM,WAAW,GAAgB;YAC/B,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE;YAC3E,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE;SAC5E,CAAC;QAEF,MAAM,MAAM,GAAG,6BAA6B,CAC1C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAC7B;YACE,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,QAAQ;SACjB,CACF,CAAC;QAEF,sFAAsF;QACtF,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;YACnC,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,aAAa;YACrB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,EAAE;YAClB,gBAAgB,EAAE,YAAY;YAC9B,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,OAAO,CAAC;YACnB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,0BAA0B;SACrC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,EAAE;YACpE,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,qFAAqF;QACrF,kCAAkC;QAClC,+EAA+E;QAC/E,mGAAmG;QACnG,MAAM,cAAc,GAAG;YACrB,IAAI,EAAE,kBAAkB;YACxB,kBAAkB,EAAE,CAAC;YACrB,IAAI,EAAE;gBACJ,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE;gBACrC,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC/E,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC/E,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC/E,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC/E,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC/E,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE;aACtC;YACD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;SAC3D,CAAC;QAEF,MAAM,KAAK,GAAW;YACpB;gBACE,EAAE,EAAE,WAAW;gBACf,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,uBAAuB;gBAC9B,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,EAAE;gBAClB,gBAAgB,EAAE,YAAY,EAAE,SAAS;gBACzC,OAAO,EAAE,YAAY,EAAW,UAAU;gBAC1C,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,YAAY;aACxB;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,6BAA6B,CAC1C,EAAE,KAAK,EAAE,KAAK,EAAE,EAChB;YACE,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,cAAc;SACzB,CACF,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAEhE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElC,oDAAoD;QACpD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,9 +1,11 @@
1
- import type { CriticalPathConfig, Project, Task, TaskDependency, TaskDependencyGraph, Team, TaskContainer, Iteration, Comment, Attachment, FileStorageAdapter, UploadFileInput, PresignedUrlOptions, PresignedUploadResult, TimeEntry, Workflow, CreateTaskInput, Deliverable, DeliverableSummary, CreateDeliverableInput, TaskLifecycleState, CriticalPathAnalysis, TimelineLadder, TimelineLadderOptions, TaskLadderView, TaskMetrics, TaskProgressHistory } from '../types/index.js';
1
+ import type { CriticalPathConfig, Project, Task, TaskDependency, TaskDependencyGraph, Team, TaskContainer, Iteration, Comment, Attachment, FileStorageAdapter, UploadFileInput, PresignedUrlOptions, PresignedUploadResult, TimeEntry, Workflow, CreateTaskInput, Deliverable, DeliverableSummary, CreateDeliverableInput, TaskLifecycleState, CriticalPathAnalysis, TimelineLadder, TimelineLadderOptions, TaskLadderView, TaskMetrics, TaskProgressHistory, WorkloadDistribution, WorkloadDistributionOptions } from '../types/index.js';
2
2
  import { StorageAdapter } from '../store/index.js';
3
3
  import { PluginRegistry } from '../plugins/index.js';
4
4
  import { DomainEventBus } from '../domain/events.js';
5
+ import { type CPMOptions } from '../domain/cpm.js';
5
6
  import { type MetricOptions } from '../domain/metrics.js';
6
7
  export declare class CriticalPathEngine {
8
+ readonly config: CriticalPathConfig;
7
9
  readonly store: StorageAdapter;
8
10
  readonly fileStorage?: FileStorageAdapter;
9
11
  readonly plugins: PluginRegistry;
@@ -94,11 +96,12 @@ export declare class CriticalPathEngine {
94
96
  createIteration(iteration: Omit<Iteration, 'id' | 'createdAt'>): Promise<Iteration>;
95
97
  updateIteration(id: string, updates: Partial<Iteration>): Promise<Iteration | null>;
96
98
  deleteIteration(id: string): Promise<boolean>;
97
- calculateCriticalPath(projectId: string): Promise<CriticalPathAnalysis>;
99
+ calculateCriticalPath(projectId: string, options?: CPMOptions): Promise<CriticalPathAnalysis>;
98
100
  getTimelineLadder(projectId: string, options?: TimelineLadderOptions): Promise<TimelineLadder>;
99
101
  getTaskLadder(taskId: string): Promise<TaskLadderView | null>;
100
102
  getTaskMetrics(taskId: string, options?: MetricOptions): Promise<TaskMetrics | null>;
101
103
  getTaskProgressHistory(taskId: string, options?: MetricOptions): Promise<TaskProgressHistory | null>;
104
+ getWorkloadDistribution(projectId?: string, options?: WorkloadDistributionOptions): Promise<WorkloadDistribution>;
102
105
  private dispatchWebhook;
103
106
  }
104
107
  //# sourceMappingURL=index.d.ts.map
@@ -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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"}
@@ -10,13 +10,16 @@ import { detectDependencyCycle, CircularDependencyError } from '../domain/graph.
10
10
  import { calculateCPM } from '../domain/cpm.js';
11
11
  import { buildTimelineLadder, aggregateConcreteEvidenceForTask } from '../domain/ladder.js';
12
12
  import { calculateTaskMetrics, reconstructTaskProgressHistory } from '../domain/metrics.js';
13
+ import { calculateWorkloadDistribution } from '../domain/workload.js';
13
14
  export class CriticalPathEngine {
15
+ config;
14
16
  store;
15
17
  fileStorage;
16
18
  plugins;
17
19
  events;
18
20
  ready = Promise.resolve();
19
21
  constructor(config = {}) {
22
+ this.config = config;
20
23
  this.store = typeof config.store === 'object' && config.store !== null
21
24
  ? config.store
22
25
  : new InMemoryStore();
@@ -397,6 +400,57 @@ export class CriticalPathEngine {
397
400
  };
398
401
  await this.events.publish(updateEvent);
399
402
  }
403
+ const wasBlocked = Boolean(existing.isBlocked || existing.customFields?.isBlocked || existing.status === 'blocked');
404
+ const isNowBlocked = Boolean(updated.isBlocked || updated.customFields?.isBlocked || updated.status === 'blocked');
405
+ if (!wasBlocked && isNowBlocked) {
406
+ const blockedReason = updated.blockedReason ?? updated.customFields?.blockedReason ?? null;
407
+ const blockedEvent = {
408
+ id: `evt_${Math.random().toString(36).substring(2, 9)}`,
409
+ name: 'task.blocked',
410
+ aggregateId: updated.id,
411
+ aggregateType: 'Task',
412
+ occurredAt: now,
413
+ payload: {
414
+ task: updated,
415
+ reason: blockedReason
416
+ }
417
+ };
418
+ await this.events.publish(blockedEvent);
419
+ await this.store.logActivity({
420
+ projectId: updated.projectId,
421
+ taskId: updated.id,
422
+ actorId: updated.assigneeId || 'system',
423
+ action: 'task.blocked',
424
+ details: { reason: blockedReason }
425
+ });
426
+ this.dispatchWebhook('task.blocked', {
427
+ task: updated,
428
+ reason: blockedReason
429
+ });
430
+ }
431
+ else if (wasBlocked && !isNowBlocked) {
432
+ const unblockedEvent = {
433
+ id: `evt_${Math.random().toString(36).substring(2, 9)}`,
434
+ name: 'task.unblocked',
435
+ aggregateId: updated.id,
436
+ aggregateType: 'Task',
437
+ occurredAt: now,
438
+ payload: {
439
+ task: updated
440
+ }
441
+ };
442
+ await this.events.publish(unblockedEvent);
443
+ await this.store.logActivity({
444
+ projectId: updated.projectId,
445
+ taskId: updated.id,
446
+ actorId: updated.assigneeId || 'system',
447
+ action: 'task.unblocked',
448
+ details: {}
449
+ });
450
+ this.dispatchWebhook('task.unblocked', {
451
+ task: updated
452
+ });
453
+ }
400
454
  await this.store.logActivity({
401
455
  projectId: updated.projectId,
402
456
  taskId: updated.id,
@@ -435,6 +489,10 @@ export class CriticalPathEngine {
435
489
  const defaultStatus = downstreamWorkflow?.defaultStatusKey || 'todo';
436
490
  updates.status = defaultStatus;
437
491
  }
492
+ if (downstream.isBlocked || downstream.blockedReason) {
493
+ updates.isBlocked = false;
494
+ updates.blockedReason = null;
495
+ }
438
496
  if (downstream.customFields?.isBlocked || downstream.customFields?.blockedReason) {
439
497
  updates.customFields = {
440
498
  ...downstream.customFields,
@@ -1130,7 +1188,8 @@ export class CriticalPathEngine {
1130
1188
  return this.store.deleteIteration(id);
1131
1189
  }
1132
1190
  // --- Ladder of Abstraction & Critical Path Method ---
1133
- async calculateCriticalPath(projectId) {
1191
+ async calculateCriticalPath(projectId, options = {}) {
1192
+ const project = await this.store.getProject(projectId);
1134
1193
  const tasks = await this.store.getTasks(projectId);
1135
1194
  const allDepArrays = await Promise.all(tasks.map((t) => this.store.getDependencies(t.id)));
1136
1195
  const seenDepIds = new Set();
@@ -1143,7 +1202,9 @@ export class CriticalPathEngine {
1143
1202
  }
1144
1203
  }
1145
1204
  }
1146
- return calculateCPM(projectId, tasks, dependencies);
1205
+ const schedule = options.schedule || project?.schedule || this.config.defaultSchedule;
1206
+ const projectStartDate = options.projectStartDate || project?.startDate;
1207
+ return calculateCPM(projectId, tasks, dependencies, { schedule, projectStartDate });
1147
1208
  }
1148
1209
  async getTimelineLadder(projectId, options = {}) {
1149
1210
  const project = await this.store.getProject(projectId);
@@ -1177,6 +1238,7 @@ export class CriticalPathEngine {
1177
1238
  }
1178
1239
  const timeEntriesNested = await Promise.all(tasks.map((t) => this.store.getTimeEntries(t.id)));
1179
1240
  const timeEntries = timeEntriesNested.flat();
1241
+ const schedule = project.schedule || this.config.defaultSchedule;
1180
1242
  return buildTimelineLadder({
1181
1243
  project,
1182
1244
  tasks,
@@ -1186,7 +1248,8 @@ export class CriticalPathEngine {
1186
1248
  deliverables,
1187
1249
  attachments,
1188
1250
  timeEntries,
1189
- activities
1251
+ activities,
1252
+ schedule
1190
1253
  }, options);
1191
1254
  }
1192
1255
  async getTaskLadder(taskId) {
@@ -1242,6 +1305,23 @@ export class CriticalPathEngine {
1242
1305
  ...options
1243
1306
  });
1244
1307
  }
1308
+ async getWorkloadDistribution(projectId, options = {}) {
1309
+ const tasks = await this.store.getTasks(projectId);
1310
+ const teams = await this.store.getTeams();
1311
+ const project = projectId ? await this.store.getProject(projectId) : undefined;
1312
+ const schedule = options.schedule || project?.schedule || this.config.defaultSchedule;
1313
+ const timeEntriesNested = await Promise.all(tasks.map((t) => this.store.getTimeEntries(t.id)));
1314
+ const timeEntries = timeEntriesNested.flat();
1315
+ return calculateWorkloadDistribution({
1316
+ tasks,
1317
+ timeEntries,
1318
+ teams,
1319
+ projectId
1320
+ }, {
1321
+ ...options,
1322
+ schedule
1323
+ });
1324
+ }
1245
1325
  async dispatchWebhook(event, payload) {
1246
1326
  const webhooks = await this.store.getWebhooks();
1247
1327
  const active = webhooks.filter((w) => w.active && w.events.includes(event));