@critical-path/core 0.36.0 → 0.37.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.
- package/README.md +1 -1
- package/dist/domain/authorization.d.ts.map +1 -1
- package/dist/domain/authorization.js +10 -7
- package/dist/domain/authorization.js.map +1 -1
- package/dist/engine/index.d.ts +6 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +28 -2
- package/dist/engine/index.js.map +1 -1
- package/dist/schemas/index.d.ts +42 -12
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +4 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/store/firebase.d.ts +2 -2
- package/dist/store/firebase.d.ts.map +1 -1
- package/dist/store/firebase.js +4 -2
- package/dist/store/firebase.js.map +1 -1
- package/dist/store/index.d.ts +7 -2
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +3 -2
- package/dist/store/index.js.map +1 -1
- package/dist/store/sqlite.d.ts +2 -2
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +5 -3
- package/dist/store/sqlite.js.map +1 -1
- package/dist/testing/conformance.d.ts.map +1 -1
- package/dist/testing/conformance.js +9 -0
- package/dist/testing/conformance.js.map +1 -1
- package/dist/types/index.d.ts +13 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +5 -1
- package/CHANGELOG.md +0 -593
- package/dist/deliverables.test.d.ts +0 -2
- package/dist/deliverables.test.d.ts.map +0 -1
- package/dist/deliverables.test.js +0 -232
- package/dist/deliverables.test.js.map +0 -1
- package/dist/domain/calendar.test.d.ts +0 -2
- package/dist/domain/calendar.test.d.ts.map +0 -1
- package/dist/domain/calendar.test.js +0 -181
- package/dist/domain/calendar.test.js.map +0 -1
- package/dist/domain/cpm.test.d.ts +0 -2
- package/dist/domain/cpm.test.d.ts.map +0 -1
- package/dist/domain/cpm.test.js +0 -166
- package/dist/domain/cpm.test.js.map +0 -1
- package/dist/domain/ddd.test.d.ts +0 -2
- package/dist/domain/ddd.test.d.ts.map +0 -1
- package/dist/domain/ddd.test.js +0 -349
- package/dist/domain/ddd.test.js.map +0 -1
- package/dist/domain/ladder.test.d.ts +0 -2
- package/dist/domain/ladder.test.d.ts.map +0 -1
- package/dist/domain/ladder.test.js +0 -213
- package/dist/domain/ladder.test.js.map +0 -1
- package/dist/domain/metrics.test.d.ts +0 -2
- package/dist/domain/metrics.test.d.ts.map +0 -1
- package/dist/domain/metrics.test.js +0 -252
- package/dist/domain/metrics.test.js.map +0 -1
- package/dist/domain/task-duration.test.d.ts +0 -2
- package/dist/domain/task-duration.test.d.ts.map +0 -1
- package/dist/domain/task-duration.test.js +0 -307
- package/dist/domain/task-duration.test.js.map +0 -1
- package/dist/domain/workload.test.d.ts +0 -2
- package/dist/domain/workload.test.d.ts.map +0 -1
- package/dist/domain/workload.test.js +0 -261
- package/dist/domain/workload.test.js.map +0 -1
- package/dist/engine/actor.test.d.ts +0 -2
- package/dist/engine/actor.test.d.ts.map +0 -1
- package/dist/engine/actor.test.js +0 -54
- package/dist/engine/actor.test.js.map +0 -1
- package/dist/engine/authorization.test.d.ts +0 -2
- package/dist/engine/authorization.test.d.ts.map +0 -1
- package/dist/engine/authorization.test.js +0 -154
- package/dist/engine/authorization.test.js.map +0 -1
- package/dist/engine/cascade.test.d.ts +0 -2
- package/dist/engine/cascade.test.d.ts.map +0 -1
- package/dist/engine/cascade.test.js +0 -99
- package/dist/engine/cascade.test.js.map +0 -1
- package/dist/engine/config.test.d.ts +0 -2
- package/dist/engine/config.test.d.ts.map +0 -1
- package/dist/engine/config.test.js +0 -46
- package/dist/engine/config.test.js.map +0 -1
- package/dist/engine/entity-events.test.d.ts +0 -2
- package/dist/engine/entity-events.test.d.ts.map +0 -1
- package/dist/engine/entity-events.test.js +0 -61
- package/dist/engine/entity-events.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -429
- package/dist/index.test.js.map +0 -1
- package/dist/plugins/plugins.test.d.ts +0 -2
- package/dist/plugins/plugins.test.d.ts.map +0 -1
- package/dist/plugins/plugins.test.js +0 -137
- package/dist/plugins/plugins.test.js.map +0 -1
- package/dist/schemas/schemas.test.d.ts +0 -2
- package/dist/schemas/schemas.test.d.ts.map +0 -1
- package/dist/schemas/schemas.test.js +0 -58
- package/dist/schemas/schemas.test.js.map +0 -1
- package/dist/status.test.d.ts +0 -2
- package/dist/status.test.d.ts.map +0 -1
- package/dist/status.test.js +0 -295
- package/dist/status.test.js.map +0 -1
- package/dist/storage/storage.test.d.ts +0 -2
- package/dist/storage/storage.test.d.ts.map +0 -1
- package/dist/storage/storage.test.js +0 -236
- package/dist/storage/storage.test.js.map +0 -1
- package/dist/storage/upload-limits.test.d.ts +0 -2
- package/dist/storage/upload-limits.test.d.ts.map +0 -1
- package/dist/storage/upload-limits.test.js +0 -31
- package/dist/storage/upload-limits.test.js.map +0 -1
- package/dist/store/conformance.test.d.ts +0 -2
- package/dist/store/conformance.test.d.ts.map +0 -1
- package/dist/store/conformance.test.js +0 -15
- package/dist/store/conformance.test.js.map +0 -1
- package/dist/store/firebase.test.d.ts +0 -2
- package/dist/store/firebase.test.d.ts.map +0 -1
- package/dist/store/firebase.test.js +0 -103
- package/dist/store/firebase.test.js.map +0 -1
- package/dist/store/query.test.d.ts +0 -2
- package/dist/store/query.test.d.ts.map +0 -1
- package/dist/store/query.test.js +0 -89
- package/dist/store/query.test.js.map +0 -1
- package/dist/store/sqlite.test.d.ts +0 -2
- package/dist/store/sqlite.test.d.ts.map +0 -1
- package/dist/store/sqlite.test.js +0 -177
- package/dist/store/sqlite.test.js.map +0 -1
- package/dist/task-state.test.d.ts +0 -2
- package/dist/task-state.test.d.ts.map +0 -1
- package/dist/task-state.test.js +0 -423
- package/dist/task-state.test.js.map +0 -1
- package/dist/use-case-validation.test.d.ts +0 -2
- package/dist/use-case-validation.test.d.ts.map +0 -1
- package/dist/use-case-validation.test.js +0 -281
- package/dist/use-case-validation.test.js.map +0 -1
- package/dist/utils/fractional-index.test.d.ts +0 -2
- package/dist/utils/fractional-index.test.d.ts.map +0 -1
- package/dist/utils/fractional-index.test.js +0 -182
- package/dist/utils/fractional-index.test.js.map +0 -1
- package/dist/utils/key.test.d.ts +0 -2
- package/dist/utils/key.test.d.ts.map +0 -1
- package/dist/utils/key.test.js +0 -65
- package/dist/utils/key.test.js.map +0 -1
- package/dist/utils/mentions.test.d.ts +0 -2
- package/dist/utils/mentions.test.d.ts.map +0 -1
- package/dist/utils/mentions.test.js +0 -114
- package/dist/utils/mentions.test.js.map +0 -1
- package/dist/webhooks/webhooks.test.d.ts +0 -2
- package/dist/webhooks/webhooks.test.d.ts.map +0 -1
- package/dist/webhooks/webhooks.test.js +0 -154
- package/dist/webhooks/webhooks.test.js.map +0 -1
- package/src/deliverables.test.ts +0 -284
- package/src/domain/authorization.ts +0 -82
- package/src/domain/calendar.test.ts +0 -216
- package/src/domain/calendar.ts +0 -502
- package/src/domain/cpm.test.ts +0 -189
- package/src/domain/cpm.ts +0 -258
- package/src/domain/custom-fields.ts +0 -172
- package/src/domain/ddd.test.ts +0 -442
- package/src/domain/entities.ts +0 -798
- package/src/domain/errors.ts +0 -38
- package/src/domain/events.ts +0 -369
- package/src/domain/graph.ts +0 -70
- package/src/domain/index.ts +0 -12
- package/src/domain/ladder.test.ts +0 -251
- package/src/domain/ladder.ts +0 -474
- package/src/domain/metrics.test.ts +0 -288
- package/src/domain/metrics.ts +0 -497
- package/src/domain/task-duration.test.ts +0 -354
- package/src/domain/workload.test.ts +0 -311
- package/src/domain/workload.ts +0 -457
- package/src/engine/actor.test.ts +0 -63
- package/src/engine/authorization.test.ts +0 -199
- package/src/engine/cascade.test.ts +0 -121
- package/src/engine/config.test.ts +0 -51
- package/src/engine/entity-events.test.ts +0 -67
- package/src/engine/index.ts +0 -2495
- package/src/index.test.ts +0 -514
- package/src/index.ts +0 -9
- package/src/plugins/index.ts +0 -103
- package/src/plugins/plugins.test.ts +0 -161
- package/src/schemas/index.ts +0 -402
- package/src/schemas/schemas.test.ts +0 -116
- package/src/status.test.ts +0 -354
- package/src/storage/file-storage.ts +0 -200
- package/src/storage/firebase-storage.ts +0 -209
- package/src/storage/index.ts +0 -3
- package/src/storage/s3.ts +0 -151
- package/src/storage/storage.test.ts +0 -274
- package/src/storage/upload-limits.test.ts +0 -41
- package/src/store/conformance.test.ts +0 -15
- package/src/store/firebase.test.ts +0 -131
- package/src/store/firebase.ts +0 -658
- package/src/store/index.ts +0 -623
- package/src/store/query.test.ts +0 -110
- package/src/store/query.ts +0 -113
- package/src/store/sqlite.test.ts +0 -218
- package/src/store/sqlite.ts +0 -1480
- package/src/task-state.test.ts +0 -506
- package/src/testing/conformance.ts +0 -319
- package/src/testing/index.ts +0 -1
- package/src/types/index.ts +0 -871
- package/src/use-case-validation.test.ts +0 -324
- package/src/utils/fractional-index.test.ts +0 -228
- package/src/utils/fractional-index.ts +0 -254
- package/src/utils/index.ts +0 -7
- package/src/utils/key.test.ts +0 -76
- package/src/utils/key.ts +0 -62
- package/src/utils/mentions.test.ts +0 -132
- package/src/utils/mentions.ts +0 -131
- package/src/utils/status.ts +0 -419
- package/src/utils/workflow.ts +0 -306
- package/src/webhooks/dispatcher.ts +0 -190
- package/src/webhooks/index.ts +0 -2
- package/src/webhooks/signature.ts +0 -57
- package/src/webhooks/webhooks.test.ts +0 -201
- package/tsconfig.json +0 -8
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-duration.test.js","sourceRoot":"","sources":["../../src/domain/task-duration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workload.test.d.ts","sourceRoot":"","sources":["../../src/domain/workload.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,261 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workload.test.js","sourceRoot":"","sources":["../../src/domain/workload.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actor.test.d.ts","sourceRoot":"","sources":["../../src/engine/actor.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { CriticalPathEngine } from '../index.js';
|
|
3
|
-
describe('CriticalPathEngine.withActor', () => {
|
|
4
|
-
it('attributes mutations to the scoped actor and ignores identity claimed in payloads', async () => {
|
|
5
|
-
const engine = new CriticalPathEngine();
|
|
6
|
-
const alice = engine.withActor({ userId: 'alice', username: 'Alice' });
|
|
7
|
-
const project = await alice.createProject({ key: 'ACT', name: 'Actors', ownerId: 'mallory' });
|
|
8
|
-
const task = await alice.createTask({ projectId: project.id, title: 'Scoped' });
|
|
9
|
-
expect(task.reporterId).toBe('alice');
|
|
10
|
-
// Identity in the payload is not part of the update type at all; cast to simulate an untyped caller
|
|
11
|
-
await alice.updateTask(task.id, { title: 'Renamed', actorId: 'ceo', actor: { userId: 'ceo' } });
|
|
12
|
-
const comment = await alice.addComment({ taskId: task.id, content: 'hi', authorId: 'ceo', authorType: 'agent' });
|
|
13
|
-
const reacted = await alice.addCommentReaction(comment.id, { emoji: '👍', userId: 'ceo' });
|
|
14
|
-
const entry = await alice.logTime({ taskId: task.id, hours: 1, userId: 'ceo' });
|
|
15
|
-
const attachment = await alice.createAttachment({
|
|
16
|
-
taskId: task.id,
|
|
17
|
-
uploaderId: 'ceo',
|
|
18
|
-
filename: 'spec.md',
|
|
19
|
-
mimeType: 'text/markdown',
|
|
20
|
-
sizeBytes: 1,
|
|
21
|
-
url: 'https://example.com/spec.md'
|
|
22
|
-
});
|
|
23
|
-
expect(comment.authorId).toBe('alice');
|
|
24
|
-
expect(comment.authorType).toBe('user');
|
|
25
|
-
expect(reacted?.reactions?.[0].userId).toBe('alice');
|
|
26
|
-
expect(entry.userId).toBe('alice');
|
|
27
|
-
expect(attachment.uploaderId).toBe('alice');
|
|
28
|
-
const activities = await engine.store.getActivities({ projectId: project.id });
|
|
29
|
-
expect(activities.length).toBeGreaterThan(0);
|
|
30
|
-
expect(activities.every((a) => a.actorId === 'alice')).toBe(true);
|
|
31
|
-
});
|
|
32
|
-
it('does not change the base engine, and concurrent views stay isolated', async () => {
|
|
33
|
-
const engine = new CriticalPathEngine();
|
|
34
|
-
const project = await engine.createProject({ key: 'ISO', name: 'Isolation' });
|
|
35
|
-
const [a, b] = await Promise.all([
|
|
36
|
-
engine.withActor({ userId: 'a' }).createTask({ projectId: project.id, title: 'A' }),
|
|
37
|
-
engine.withActor({ userId: 'b' }).createTask({ projectId: project.id, title: 'B' })
|
|
38
|
-
]);
|
|
39
|
-
expect(a.reporterId).toBe('a');
|
|
40
|
-
expect(b.reporterId).toBe('b');
|
|
41
|
-
expect(engine.actor).toBeUndefined();
|
|
42
|
-
// Views share state with the base engine
|
|
43
|
-
expect(await engine.getTask(a.id)).not.toBeNull();
|
|
44
|
-
});
|
|
45
|
-
it('still lets explicit updateTask options override the scoped actor', async () => {
|
|
46
|
-
const engine = new CriticalPathEngine();
|
|
47
|
-
const project = await engine.createProject({ key: 'OPT', name: 'Options' });
|
|
48
|
-
const task = await engine.createTask({ projectId: project.id, title: 'T' });
|
|
49
|
-
await engine.withActor({ userId: 'alice' }).updateTask(task.id, { title: 'T2' }, { actorId: 'automation' });
|
|
50
|
-
const activities = await engine.store.getActivities({ taskId: task.id });
|
|
51
|
-
expect(activities.some((a) => a.actorId === 'automation')).toBe(true);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
//# sourceMappingURL=actor.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actor.test.js","sourceRoot":"","sources":["../../src/engine/actor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.test.d.ts","sourceRoot":"","sources":["../../src/engine/authorization.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { CriticalPathEngine, SQLiteStore, InMemoryFileStore, createRolePolicy, ForbiddenError, NotFoundError } from '../index.js';
|
|
3
|
-
async function setup(members) {
|
|
4
|
-
const engine = new CriticalPathEngine({ authorize: createRolePolicy() });
|
|
5
|
-
const project = await engine.createProject({ key: 'RB', name: 'RBAC', members });
|
|
6
|
-
const task = await engine.createTask({ projectId: project.id, title: 'Task' });
|
|
7
|
-
return { engine, project, task };
|
|
8
|
-
}
|
|
9
|
-
describe('role-based authorization (createRolePolicy)', () => {
|
|
10
|
-
it('lets viewers read but not write', async () => {
|
|
11
|
-
const { engine, project, task } = await setup([{ userId: 'vic', role: 'viewer' }]);
|
|
12
|
-
const vic = engine.withActor({ userId: 'vic' });
|
|
13
|
-
expect(await vic.getProject(project.id)).not.toBeNull();
|
|
14
|
-
expect(await vic.getTasks(project.id)).toHaveLength(1);
|
|
15
|
-
await expect(vic.createTask({ projectId: project.id, title: 'Nope' })).rejects.toThrow(ForbiddenError);
|
|
16
|
-
await expect(vic.updateTask(task.id, { title: 'Nope' })).rejects.toThrow(ForbiddenError);
|
|
17
|
-
await expect(vic.addComment({ taskId: task.id, content: 'hi' })).rejects.toThrow(ForbiddenError);
|
|
18
|
-
});
|
|
19
|
-
it('lets contributors work on tasks but not delete them or manage the plan', async () => {
|
|
20
|
-
const { engine, project, task } = await setup([{ userId: 'cora', role: 'contributor' }]);
|
|
21
|
-
const cora = engine.withActor({ userId: 'cora' });
|
|
22
|
-
await cora.updateTask(task.id, { title: 'Progress' });
|
|
23
|
-
await cora.logTime({ taskId: task.id, hours: 1 });
|
|
24
|
-
await expect(cora.deleteTask(task.id)).rejects.toThrow(ForbiddenError);
|
|
25
|
-
await expect(cora.createIteration({ projectId: project.id, name: 'S1', status: 'planning' })).rejects.toThrow(ForbiddenError);
|
|
26
|
-
await expect(cora.updateProject(project.id, { name: 'Renamed' })).rejects.toThrow(ForbiddenError);
|
|
27
|
-
});
|
|
28
|
-
it('lets project managers delete tasks and manage members, and only admins delete projects', async () => {
|
|
29
|
-
const { engine, project, task } = await setup([
|
|
30
|
-
{ userId: 'pam', role: 'project_manager' },
|
|
31
|
-
{ userId: 'ada', role: 'admin' }
|
|
32
|
-
]);
|
|
33
|
-
const pam = engine.withActor({ userId: 'pam' });
|
|
34
|
-
await pam.createIteration({ projectId: project.id, name: 'S1', status: 'planning' });
|
|
35
|
-
await pam.updateProject(project.id, { members: [...project.members, { userId: 'new', role: 'viewer' }] });
|
|
36
|
-
expect(await pam.deleteTask(task.id)).toBe(true);
|
|
37
|
-
await expect(pam.deleteProject(project.id)).rejects.toThrow(ForbiddenError);
|
|
38
|
-
expect(await engine.withActor({ userId: 'ada' }).deleteProject(project.id)).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
it('hides projects from non-members as if they did not exist', async () => {
|
|
41
|
-
const { engine, project, task } = await setup([]);
|
|
42
|
-
const eve = engine.withActor({ userId: 'eve' });
|
|
43
|
-
expect(await eve.getProjects()).toHaveLength(0);
|
|
44
|
-
expect(await eve.getProject(project.id)).toBeNull();
|
|
45
|
-
expect(await eve.getTask(task.id)).toBeNull();
|
|
46
|
-
expect(await eve.getTasks()).toHaveLength(0);
|
|
47
|
-
expect(await eve.getActivities({ projectId: project.id })).toHaveLength(0);
|
|
48
|
-
expect(await eve.updateTask(task.id, { title: 'x' })).toBeNull();
|
|
49
|
-
await expect(eve.createTask({ projectId: project.id, title: 'x' })).rejects.toThrow(NotFoundError);
|
|
50
|
-
await expect(eve.calculateCriticalPath(project.id)).rejects.toThrow(NotFoundError);
|
|
51
|
-
});
|
|
52
|
-
it('makes the creator an admin of new projects and denies anonymous creation', async () => {
|
|
53
|
-
const engine = new CriticalPathEngine({ authorize: createRolePolicy() });
|
|
54
|
-
const project = await engine.withActor({ userId: 'carl' }).createProject({ name: 'Mine' });
|
|
55
|
-
expect(project.members).toEqual([{ userId: 'carl', role: 'admin' }]);
|
|
56
|
-
await expect(engine.withActor({ userId: 'anonymous' }).createProject({ name: 'Nope' })).rejects.toThrow(ForbiddenError);
|
|
57
|
-
});
|
|
58
|
-
it('lets authors edit their own comments while moderators can edit anyone’s', async () => {
|
|
59
|
-
const { engine, task } = await setup([
|
|
60
|
-
{ userId: 'a1', role: 'contributor' },
|
|
61
|
-
{ userId: 'a2', role: 'contributor' },
|
|
62
|
-
{ userId: 'pm', role: 'project_manager' }
|
|
63
|
-
]);
|
|
64
|
-
const comment = await engine.withActor({ userId: 'a1' }).addComment({ taskId: task.id, content: 'mine' });
|
|
65
|
-
await engine.withActor({ userId: 'a1' }).updateComment(comment.id, { content: 'edited' });
|
|
66
|
-
await expect(engine.withActor({ userId: 'a2' }).updateComment(comment.id, { content: 'hijack' })).rejects.toThrow(ForbiddenError);
|
|
67
|
-
expect(await engine.withActor({ userId: 'pm' }).deleteComment(comment.id)).toBe(true);
|
|
68
|
-
});
|
|
69
|
-
it('treats workspace superusers as allowed everywhere and gates workspace management', async () => {
|
|
70
|
-
const { engine, project } = await setup([{ userId: 'mem', role: 'admin' }]);
|
|
71
|
-
const root = engine.withActor({ userId: 'root', roles: ['admin'] });
|
|
72
|
-
expect(await root.getProject(project.id)).not.toBeNull();
|
|
73
|
-
await root.createTeam({ name: 'Core', memberIds: [] });
|
|
74
|
-
await expect(engine.withActor({ userId: 'mem' }).createTeam({ name: 'Nope', memberIds: [] })).rejects.toThrow(ForbiddenError);
|
|
75
|
-
});
|
|
76
|
-
it('runs project deletion cascades without per-task checks', async () => {
|
|
77
|
-
const engine = new CriticalPathEngine({
|
|
78
|
-
authorize: createRolePolicy({ rolePermissions: { admin: ['project.read', 'project.delete'] } })
|
|
79
|
-
});
|
|
80
|
-
const project = await engine.createProject({ name: 'Cascade', members: [{ userId: 'ada', role: 'admin' }] });
|
|
81
|
-
const task = await engine.createTask({ projectId: project.id, title: 'Child' });
|
|
82
|
-
expect(await engine.withActor({ userId: 'ada' }).deleteProject(project.id)).toBe(true);
|
|
83
|
-
expect(await engine.getTask(task.id)).toBeNull();
|
|
84
|
-
});
|
|
85
|
-
it('keeps presigned uploads inside the project prefix', async () => {
|
|
86
|
-
const engine = new CriticalPathEngine({ authorize: createRolePolicy(), fileStorage: new InMemoryFileStore() });
|
|
87
|
-
const project = await engine.createProject({ name: 'Files', members: [{ userId: 'up', role: 'contributor' }] });
|
|
88
|
-
const up = engine.withActor({ userId: 'up' });
|
|
89
|
-
const presigned = await up.getPresignedAttachmentUploadUrl({ projectId: project.id, filename: 'spec.pdf' });
|
|
90
|
-
expect(presigned.storageKey).toMatch(new RegExp(`^projects/${project.id}/\\d+_[0-9a-f]+_spec\\.pdf$`));
|
|
91
|
-
await expect(up.getPresignedAttachmentUploadUrl({ filename: 'x' })).rejects.toThrow(/projectId is required/);
|
|
92
|
-
const outsider = engine.withActor({ userId: 'nobody' });
|
|
93
|
-
await expect(outsider.getPresignedAttachmentUploadUrl({ projectId: project.id, filename: 'x' })).rejects.toThrow(/not found/);
|
|
94
|
-
// Registering someone else's file (so that deleting the attachment deletes it) is rejected
|
|
95
|
-
await expect(up.createAttachment({ projectId: project.id, filename: 'x', url: 'https://e.com/x', mimeType: 'text/plain', sizeBytes: 1, storageKey: 'projects/other/secret.pdf' })).rejects.toThrow(/storageKey must be under/);
|
|
96
|
-
await expect(up.createAttachment({ projectId: project.id, filename: 'x', url: 'https://e.com/x', mimeType: 'text/plain', sizeBytes: 1, storageKey: presigned.storageKey })).resolves.toMatchObject({ storageKey: presigned.storageKey });
|
|
97
|
-
});
|
|
98
|
-
it('leaves the base engine and views without a policy unrestricted', async () => {
|
|
99
|
-
const { engine, project } = await setup([]);
|
|
100
|
-
expect(await engine.getProject(project.id)).not.toBeNull();
|
|
101
|
-
const open = new CriticalPathEngine();
|
|
102
|
-
const p = await open.createProject({ name: 'Open' });
|
|
103
|
-
expect(await open.withActor({ userId: 'anyone' }).getProject(p.id)).not.toBeNull();
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
describe('tenant isolation', () => {
|
|
107
|
-
it('scopes projects, workflows and teams to the actor tenant and stamps new records', async () => {
|
|
108
|
-
const engine = new CriticalPathEngine();
|
|
109
|
-
const acme = engine.withActor({ userId: 'a', tenantId: 'acme' });
|
|
110
|
-
const globex = engine.withActor({ userId: 'g', tenantId: 'globex' });
|
|
111
|
-
const project = await acme.createProject({ name: 'Acme roadmap' });
|
|
112
|
-
expect(project.tenantId).toBe('acme');
|
|
113
|
-
const workflow = await acme.createWorkflow({ name: 'Acme flow', statuses: [], transitions: [] });
|
|
114
|
-
const team = await acme.createTeam({ name: 'Acme team', memberIds: [] });
|
|
115
|
-
expect(await globex.getProjects()).toHaveLength(0);
|
|
116
|
-
expect(await globex.getProject(project.id)).toBeNull();
|
|
117
|
-
expect(await globex.getWorkflow(workflow.id)).toBeNull();
|
|
118
|
-
expect(await globex.getTeams()).toHaveLength(0);
|
|
119
|
-
expect(await globex.updateTeam(team.id, { name: 'x' })).toBeNull();
|
|
120
|
-
// Tenancy cannot be changed through a view
|
|
121
|
-
await acme.updateProject(project.id, { tenantId: 'globex' });
|
|
122
|
-
expect((await engine.getProject(project.id))?.tenantId).toBe('acme');
|
|
123
|
-
});
|
|
124
|
-
it('never lets a view choose a tenant, while trusted base-engine calls may', async () => {
|
|
125
|
-
const engine = new CriticalPathEngine();
|
|
126
|
-
const viaView = await engine.withActor({ userId: 'x' }).createProject({ name: 'View', tenantId: 'acme' });
|
|
127
|
-
expect(viaView.tenantId).toBeUndefined();
|
|
128
|
-
const seeded = await engine.createProject({ name: 'Seeded', tenantId: 'acme' });
|
|
129
|
-
expect(seeded.tenantId).toBe('acme');
|
|
130
|
-
const team = await engine.createTeam({ name: 'Seeded team', memberIds: [], tenantId: 'acme' });
|
|
131
|
-
expect(team.tenantId).toBe('acme');
|
|
132
|
-
});
|
|
133
|
-
it('only falls back to default workflows from the project tenant', async () => {
|
|
134
|
-
const engine = new CriticalPathEngine();
|
|
135
|
-
await engine.withActor({ userId: 'g', tenantId: 'globex' }).createWorkflow({
|
|
136
|
-
name: 'Globex default',
|
|
137
|
-
isDefault: true,
|
|
138
|
-
statuses: [{ key: 'only', label: 'Only', category: 'not_started' }],
|
|
139
|
-
transitions: []
|
|
140
|
-
});
|
|
141
|
-
const acmeProject = await engine.withActor({ userId: 'a', tenantId: 'acme' }).createProject({ name: 'Acme' });
|
|
142
|
-
const workflow = await engine.resolveProjectWorkflow(acmeProject.id);
|
|
143
|
-
expect(workflow?.name).not.toBe('Globex default');
|
|
144
|
-
});
|
|
145
|
-
it('persists tenancy and membership in SQLiteStore', async () => {
|
|
146
|
-
const engine = new CriticalPathEngine({ store: new SQLiteStore({ filename: ':memory:' }), authorize: createRolePolicy() });
|
|
147
|
-
const project = await engine.withActor({ userId: 'a', tenantId: 'acme' }).createProject({ name: 'Stored' });
|
|
148
|
-
const stored = await engine.getProject(project.id);
|
|
149
|
-
expect(stored?.tenantId).toBe('acme');
|
|
150
|
-
expect(stored?.members).toEqual([{ userId: 'a', role: 'admin' }]);
|
|
151
|
-
expect(await engine.withActor({ userId: 'a', tenantId: 'other' }).getProject(project.id)).toBeNull();
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
//# sourceMappingURL=authorization.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.test.js","sourceRoot":"","sources":["../../src/engine/authorization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cascade.test.d.ts","sourceRoot":"","sources":["../../src/engine/cascade.test.ts"],"names":[],"mappings":""}
|