perttool 0.3.0 → 0.5.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 (286) hide show
  1. package/CHANGELOG.md +78 -1
  2. package/README.md +134 -24
  3. package/dist/actuals/lifecycle.d.ts +101 -0
  4. package/dist/actuals/lifecycle.d.ts.map +1 -0
  5. package/dist/actuals/lifecycle.js +329 -0
  6. package/dist/actuals/lifecycle.js.map +1 -0
  7. package/dist/actuals/source.d.ts +36 -0
  8. package/dist/actuals/source.d.ts.map +1 -0
  9. package/dist/actuals/source.js +119 -0
  10. package/dist/actuals/source.js.map +1 -0
  11. package/dist/analysis/temporal-deadline.d.ts +2 -2
  12. package/dist/analysis/temporal-deadline.d.ts.map +1 -1
  13. package/dist/analysis/temporal-deadline.js.map +1 -1
  14. package/dist/analysis/temporal-precedence.d.ts +2 -2
  15. package/dist/analysis/temporal-precedence.d.ts.map +1 -1
  16. package/dist/analysis/temporal-precedence.js +2 -0
  17. package/dist/analysis/temporal-precedence.js.map +1 -1
  18. package/dist/analysis/temporal-resource.d.ts +2 -2
  19. package/dist/analysis/temporal-resource.d.ts.map +1 -1
  20. package/dist/analysis/temporal-resource.js +2 -0
  21. package/dist/analysis/temporal-resource.js.map +1 -1
  22. package/dist/application/analyze.d.ts +1 -0
  23. package/dist/application/analyze.d.ts.map +1 -1
  24. package/dist/application/analyze.js +38 -29
  25. package/dist/application/analyze.js.map +1 -1
  26. package/dist/application/check.d.ts +3 -0
  27. package/dist/application/check.d.ts.map +1 -1
  28. package/dist/application/check.js +17 -1
  29. package/dist/application/check.js.map +1 -1
  30. package/dist/application/contract4.js +3 -3
  31. package/dist/application/contract5-governance.d.ts +8 -0
  32. package/dist/application/contract5-governance.d.ts.map +1 -0
  33. package/dist/application/contract5-governance.js +12 -0
  34. package/dist/application/contract5-governance.js.map +1 -0
  35. package/dist/application/contract6-actuals.d.ts +24 -0
  36. package/dist/application/contract6-actuals.d.ts.map +1 -0
  37. package/dist/application/contract6-actuals.js +51 -0
  38. package/dist/application/contract6-actuals.js.map +1 -0
  39. package/dist/application/contract6-mutation.d.ts +18 -0
  40. package/dist/application/contract6-mutation.d.ts.map +1 -0
  41. package/dist/application/contract6-mutation.js +173 -0
  42. package/dist/application/contract6-mutation.js.map +1 -0
  43. package/dist/application/contract6-projection.d.ts +9 -0
  44. package/dist/application/contract6-projection.d.ts.map +1 -0
  45. package/dist/application/contract6-projection.js +105 -0
  46. package/dist/application/contract6-projection.js.map +1 -0
  47. package/dist/application/init.d.ts +3 -12
  48. package/dist/application/init.d.ts.map +1 -1
  49. package/dist/application/init.js +16 -138
  50. package/dist/application/init.js.map +1 -1
  51. package/dist/application/project.d.ts +4 -24
  52. package/dist/application/project.d.ts.map +1 -1
  53. package/dist/application/project.js +3 -52
  54. package/dist/application/project.js.map +1 -1
  55. package/dist/application/target-actuals-advance.d.ts +12 -0
  56. package/dist/application/target-actuals-advance.d.ts.map +1 -0
  57. package/dist/application/target-actuals-advance.js +113 -0
  58. package/dist/application/target-actuals-advance.js.map +1 -0
  59. package/dist/application/target-actuals-analysis.d.ts +76 -0
  60. package/dist/application/target-actuals-analysis.d.ts.map +1 -0
  61. package/dist/application/target-actuals-analysis.js +250 -0
  62. package/dist/application/target-actuals-analysis.js.map +1 -0
  63. package/dist/application/target-actuals-mutation.d.ts +28 -0
  64. package/dist/application/target-actuals-mutation.d.ts.map +1 -0
  65. package/dist/application/target-actuals-mutation.js +404 -0
  66. package/dist/application/target-actuals-mutation.js.map +1 -0
  67. package/dist/application/target-actuals-write.d.ts +7 -0
  68. package/dist/application/target-actuals-write.d.ts.map +1 -0
  69. package/dist/application/target-actuals-write.js +37 -0
  70. package/dist/application/target-actuals-write.js.map +1 -0
  71. package/dist/application/target-governance-init.d.ts +36 -0
  72. package/dist/application/target-governance-init.d.ts.map +1 -0
  73. package/dist/application/target-governance-init.js +195 -0
  74. package/dist/application/target-governance-init.js.map +1 -0
  75. package/dist/application/target-governance-mutation.d.ts +20 -0
  76. package/dist/application/target-governance-mutation.d.ts.map +1 -0
  77. package/dist/application/target-governance-mutation.js +175 -0
  78. package/dist/application/target-governance-mutation.js.map +1 -0
  79. package/dist/application/target-governance-project.d.ts +34 -0
  80. package/dist/application/target-governance-project.d.ts.map +1 -0
  81. package/dist/application/target-governance-project.js +82 -0
  82. package/dist/application/target-governance-project.js.map +1 -0
  83. package/dist/application/target-governance-projection.d.ts +18 -0
  84. package/dist/application/target-governance-projection.d.ts.map +1 -0
  85. package/dist/application/target-governance-projection.js +248 -0
  86. package/dist/application/target-governance-projection.js.map +1 -0
  87. package/dist/application/target-governance-write.d.ts +25 -0
  88. package/dist/application/target-governance-write.d.ts.map +1 -0
  89. package/dist/application/target-governance-write.js +55 -0
  90. package/dist/application/target-governance-write.js.map +1 -0
  91. package/dist/application/target-mutate.d.ts +6 -2
  92. package/dist/application/target-mutate.d.ts.map +1 -1
  93. package/dist/application/target-mutate.js +59 -2
  94. package/dist/application/target-mutate.js.map +1 -1
  95. package/dist/application/target-project-history.d.ts +18 -0
  96. package/dist/application/target-project-history.d.ts.map +1 -0
  97. package/dist/application/target-project-history.js +279 -0
  98. package/dist/application/target-project-history.js.map +1 -0
  99. package/dist/application/target-temporal-analysis.d.ts +13 -5
  100. package/dist/application/target-temporal-analysis.d.ts.map +1 -1
  101. package/dist/application/target-temporal-analysis.js +18 -11
  102. package/dist/application/target-temporal-analysis.js.map +1 -1
  103. package/dist/application/target-temporal-input.d.ts +8 -6
  104. package/dist/application/target-temporal-input.d.ts.map +1 -1
  105. package/dist/application/target-temporal-input.js +14 -3
  106. package/dist/application/target-temporal-input.js.map +1 -1
  107. package/dist/application/target-unit-migration-candidate.d.ts +2 -2
  108. package/dist/application/target-unit-migration-candidate.d.ts.map +1 -1
  109. package/dist/application/target-unit-migration-candidate.js +21 -6
  110. package/dist/application/target-unit-migration-candidate.js.map +1 -1
  111. package/dist/application/target-unit-migration-request.d.ts +4 -4
  112. package/dist/application/target-unit-migration-request.d.ts.map +1 -1
  113. package/dist/application/target-unit-migration-request.js +6 -2
  114. package/dist/application/target-unit-migration-request.js.map +1 -1
  115. package/dist/application/target-unit-migration-result.d.ts +5 -5
  116. package/dist/application/target-unit-migration-result.d.ts.map +1 -1
  117. package/dist/application/target-unit-migration-result.js +1 -1
  118. package/dist/application/target-unit-migration-result.js.map +1 -1
  119. package/dist/application/target-velocity-observation.d.ts +11 -0
  120. package/dist/application/target-velocity-observation.d.ts.map +1 -0
  121. package/dist/application/target-velocity-observation.js +201 -0
  122. package/dist/application/target-velocity-observation.js.map +1 -0
  123. package/dist/application/unit-migration.d.ts +4 -1
  124. package/dist/application/unit-migration.d.ts.map +1 -1
  125. package/dist/application/unit-migration.js +5 -3
  126. package/dist/application/unit-migration.js.map +1 -1
  127. package/dist/cli.js +390 -137
  128. package/dist/cli.js.map +1 -1
  129. package/dist/command/actuals-discovery.d.ts +26 -0
  130. package/dist/command/actuals-discovery.d.ts.map +1 -0
  131. package/dist/command/actuals-discovery.js +271 -0
  132. package/dist/command/actuals-discovery.js.map +1 -0
  133. package/dist/command/actuals-usage.d.ts +22 -0
  134. package/dist/command/actuals-usage.d.ts.map +1 -0
  135. package/dist/command/actuals-usage.js +122 -0
  136. package/dist/command/actuals-usage.js.map +1 -0
  137. package/dist/command/registry.d.ts +7 -1
  138. package/dist/command/registry.d.ts.map +1 -1
  139. package/dist/command/registry.js.map +1 -1
  140. package/dist/command/target-governance-discovery.d.ts +31 -0
  141. package/dist/command/target-governance-discovery.d.ts.map +1 -0
  142. package/dist/command/target-governance-discovery.js +390 -0
  143. package/dist/command/target-governance-discovery.js.map +1 -0
  144. package/dist/command/target-governance-usage.d.ts +22 -0
  145. package/dist/command/target-governance-usage.d.ts.map +1 -0
  146. package/dist/command/target-governance-usage.js +116 -0
  147. package/dist/command/target-governance-usage.js.map +1 -0
  148. package/dist/command/usage.d.ts +2 -0
  149. package/dist/command/usage.d.ts.map +1 -1
  150. package/dist/command/usage.js +43 -25
  151. package/dist/command/usage.js.map +1 -1
  152. package/dist/conversion/mermaid-import.d.ts.map +1 -1
  153. package/dist/conversion/mermaid-import.js +3 -2
  154. package/dist/conversion/mermaid-import.js.map +1 -1
  155. package/dist/conversion/mermaid.d.ts.map +1 -1
  156. package/dist/conversion/mermaid.js +27 -0
  157. package/dist/conversion/mermaid.js.map +1 -1
  158. package/dist/formatter/source-formatter.d.ts +3 -3
  159. package/dist/formatter/source-formatter.d.ts.map +1 -1
  160. package/dist/formatter/source-formatter.js +64 -5
  161. package/dist/formatter/source-formatter.js.map +1 -1
  162. package/dist/formatter/target-source-formatter.d.ts +3 -1
  163. package/dist/formatter/target-source-formatter.d.ts.map +1 -1
  164. package/dist/formatter/target-source-formatter.js +34 -2
  165. package/dist/formatter/target-source-formatter.js.map +1 -1
  166. package/dist/governance/authority.d.ts +25 -0
  167. package/dist/governance/authority.d.ts.map +1 -0
  168. package/dist/governance/authority.js +206 -0
  169. package/dist/governance/authority.js.map +1 -0
  170. package/dist/governance/guidance.d.ts +2 -0
  171. package/dist/governance/guidance.d.ts.map +1 -0
  172. package/dist/governance/guidance.js +2 -0
  173. package/dist/governance/guidance.js.map +1 -0
  174. package/dist/governance/source.d.ts +37 -0
  175. package/dist/governance/source.d.ts.map +1 -0
  176. package/dist/governance/source.js +103 -0
  177. package/dist/governance/source.js.map +1 -0
  178. package/dist/governance/types.d.ts +41 -0
  179. package/dist/governance/types.d.ts.map +1 -0
  180. package/dist/governance/types.js +2 -0
  181. package/dist/governance/types.js.map +1 -0
  182. package/dist/help/actuals-guide.d.ts +10 -0
  183. package/dist/help/actuals-guide.d.ts.map +1 -0
  184. package/dist/help/actuals-guide.js +23 -0
  185. package/dist/help/actuals-guide.js.map +1 -0
  186. package/dist/help/guide.d.ts +8 -5
  187. package/dist/help/guide.d.ts.map +1 -1
  188. package/dist/help/guide.js.map +1 -1
  189. package/dist/help/registry.d.ts.map +1 -1
  190. package/dist/help/registry.js +98 -8
  191. package/dist/help/registry.js.map +1 -1
  192. package/dist/help/target-governance-guide.d.ts +10 -0
  193. package/dist/help/target-governance-guide.d.ts.map +1 -0
  194. package/dist/help/target-governance-guide.js +57 -0
  195. package/dist/help/target-governance-guide.js.map +1 -0
  196. package/dist/history/git-probe.d.ts +52 -0
  197. package/dist/history/git-probe.d.ts.map +1 -0
  198. package/dist/history/git-probe.js +565 -0
  199. package/dist/history/git-probe.js.map +1 -0
  200. package/dist/history/project-history.d.ts +112 -0
  201. package/dist/history/project-history.d.ts.map +1 -0
  202. package/dist/history/project-history.js +786 -0
  203. package/dist/history/project-history.js.map +1 -0
  204. package/dist/history/velocity-observation.d.ts +69 -0
  205. package/dist/history/velocity-observation.d.ts.map +1 -0
  206. package/dist/history/velocity-observation.js +604 -0
  207. package/dist/history/velocity-observation.js.map +1 -0
  208. package/dist/index.d.ts +28 -14
  209. package/dist/index.d.ts.map +1 -1
  210. package/dist/index.js +11 -7
  211. package/dist/index.js.map +1 -1
  212. package/dist/io/safe-write.d.ts +4 -0
  213. package/dist/io/safe-write.d.ts.map +1 -1
  214. package/dist/io/safe-write.js +22 -1
  215. package/dist/io/safe-write.js.map +1 -1
  216. package/dist/io/target-safe-write.d.ts +8 -2
  217. package/dist/io/target-safe-write.d.ts.map +1 -1
  218. package/dist/io/target-safe-write.js +38 -2
  219. package/dist/io/target-safe-write.js.map +1 -1
  220. package/dist/migration/conversion.d.ts +1 -1
  221. package/dist/migration/conversion.d.ts.map +1 -1
  222. package/dist/migration/grammar-boundary.d.ts +1 -1
  223. package/dist/migration/grammar-boundary.d.ts.map +1 -1
  224. package/dist/migration/grammar-boundary.js +15 -4
  225. package/dist/migration/grammar-boundary.js.map +1 -1
  226. package/dist/migration/request.d.ts +5 -5
  227. package/dist/migration/request.d.ts.map +1 -1
  228. package/dist/migration/request.js +15 -2
  229. package/dist/migration/request.js.map +1 -1
  230. package/dist/model/calendar.d.ts +2 -0
  231. package/dist/model/calendar.d.ts.map +1 -1
  232. package/dist/model/calendar.js +19 -0
  233. package/dist/model/calendar.js.map +1 -1
  234. package/dist/model/declaration-fields.d.ts +15 -0
  235. package/dist/model/declaration-fields.d.ts.map +1 -1
  236. package/dist/model/declaration-fields.js +31 -0
  237. package/dist/model/declaration-fields.js.map +1 -1
  238. package/dist/model/exact-person-hours-source.d.ts +2 -0
  239. package/dist/model/exact-person-hours-source.d.ts.map +1 -0
  240. package/dist/model/exact-person-hours-source.js +10 -0
  241. package/dist/model/exact-person-hours-source.js.map +1 -0
  242. package/dist/model/syntax.d.ts +23 -8
  243. package/dist/model/syntax.d.ts.map +1 -1
  244. package/dist/model/syntax.js.map +1 -1
  245. package/dist/mutation/actuals.d.ts +17 -0
  246. package/dist/mutation/actuals.d.ts.map +1 -0
  247. package/dist/mutation/actuals.js +90 -0
  248. package/dist/mutation/actuals.js.map +1 -0
  249. package/dist/mutation/advance.d.ts +17 -0
  250. package/dist/mutation/advance.d.ts.map +1 -1
  251. package/dist/mutation/advance.js +56 -14
  252. package/dist/mutation/advance.js.map +1 -1
  253. package/dist/mutation/entity-editor.d.ts +2 -2
  254. package/dist/mutation/entity-editor.d.ts.map +1 -1
  255. package/dist/mutation/entity-editor.js.map +1 -1
  256. package/dist/mutation/project.d.ts +7 -1
  257. package/dist/mutation/project.d.ts.map +1 -1
  258. package/dist/mutation/project.js +108 -6
  259. package/dist/mutation/project.js.map +1 -1
  260. package/dist/mutation/source.d.ts +3 -3
  261. package/dist/mutation/source.d.ts.map +1 -1
  262. package/dist/mutation/source.js.map +1 -1
  263. package/dist/mutation/target-types.d.ts +18 -1
  264. package/dist/mutation/target-types.d.ts.map +1 -1
  265. package/dist/mutation/types.d.ts +8 -1
  266. package/dist/mutation/types.d.ts.map +1 -1
  267. package/dist/parser/document-parser.d.ts +15 -1
  268. package/dist/parser/document-parser.d.ts.map +1 -1
  269. package/dist/parser/document-parser.js +205 -22
  270. package/dist/parser/document-parser.js.map +1 -1
  271. package/dist/recommendation/override-types.d.ts +2 -2
  272. package/dist/recommendation/override.d.ts +2 -2
  273. package/dist/recommendation/override.d.ts.map +1 -1
  274. package/dist/recommendation/override.js +2 -2
  275. package/dist/recommendation/override.js.map +1 -1
  276. package/dist/semantic/target-validator.d.ts +23 -2
  277. package/dist/semantic/target-validator.d.ts.map +1 -1
  278. package/dist/semantic/target-validator.js +89 -2
  279. package/dist/semantic/target-validator.js.map +1 -1
  280. package/dist/semantic/validator.d.ts +5 -1
  281. package/dist/semantic/validator.d.ts.map +1 -1
  282. package/dist/semantic/validator.js +180 -6
  283. package/dist/semantic/validator.js.map +1 -1
  284. package/dist/version.d.ts +1 -1
  285. package/dist/version.js +1 -1
  286. package/package.json +3 -2
@@ -0,0 +1,604 @@
1
+ import { civilDayNumber, } from "../model/calendar-arithmetic.js";
2
+ import { compareStableStrings, } from "../model/diagnostics.js";
3
+ import { serializeExactDurationSource } from "../model/exact-duration-source.js";
4
+ import { ONE, ZERO, add, compare, divide, formatDecimal, rational, subtract, } from "../model/rational.js";
5
+ export const VELOCITY_OBSERVATION_MODEL_VERSION = 1;
6
+ const causeOrder = [
7
+ "no_selected_tasks",
8
+ "no_complete_sequence",
9
+ "non_positive_window",
10
+ "mixed_offsets",
11
+ "incomplete_active_intervals",
12
+ "missing_effort",
13
+ "missing_baseline",
14
+ "history_incomplete",
15
+ "history_unavailable",
16
+ "git_recorded_start_missing",
17
+ "git_recorded_finish_missing",
18
+ ];
19
+ function exact(value) {
20
+ return rational(BigInt(value.numerator), BigInt(value.denominator));
21
+ }
22
+ function quantity(value, unit) {
23
+ return Object.freeze({
24
+ numerator: value.numerator.toString(),
25
+ denominator: value.denominator.toString(),
26
+ unit,
27
+ display: formatDecimal(value, 6),
28
+ });
29
+ }
30
+ function observationCause(cause, fields = {}) {
31
+ return Object.freeze({
32
+ cause,
33
+ taskId: fields.taskId ?? null,
34
+ eventId: fields.eventId ?? null,
35
+ commitId: fields.commitId ?? null,
36
+ });
37
+ }
38
+ function sortCauses(causes) {
39
+ const order = new Map(causeOrder.map((cause, index) => [cause, index]));
40
+ const key = (value) => value ?? "";
41
+ return Object.freeze([...causes].sort((left, right) => order.get(left.cause) - order.get(right.cause) ||
42
+ compareStableStrings(key(left.taskId), key(right.taskId)) ||
43
+ compareStableStrings(key(left.eventId), key(right.eventId)) ||
44
+ compareStableStrings(key(left.commitId), key(right.commitId))));
45
+ }
46
+ function uniqueCauses(causes) {
47
+ const seen = new Set();
48
+ return sortCauses(causes.filter((cause) => {
49
+ const key = [
50
+ cause.cause,
51
+ cause.taskId ?? "",
52
+ cause.eventId ?? "",
53
+ cause.commitId ?? "",
54
+ ].join("\u0000");
55
+ if (seen.has(key))
56
+ return false;
57
+ seen.add(key);
58
+ return true;
59
+ }));
60
+ }
61
+ function targetInstant(value) {
62
+ if (value.kind !== "date_time")
63
+ return null;
64
+ const wholeSeconds = civilDayNumber(value) * 86400n +
65
+ BigInt(value.hour * 3_600 + value.minute * 60) -
66
+ BigInt(value.offsetMinutes * 60);
67
+ return add(rational(wholeSeconds), rational(BigInt(value.second.numerator), BigInt(value.second.denominator)));
68
+ }
69
+ function compareCalendar(left, right) {
70
+ const leftInstant = targetInstant(left);
71
+ const rightInstant = targetInstant(right);
72
+ if (leftInstant === null || rightInstant === null) {
73
+ throw new Error("velocity observation requires fixed-offset date-times");
74
+ }
75
+ return compare(leftInstant, rightInstant);
76
+ }
77
+ function baselineSource(task) {
78
+ if (task.baselineSource === null) {
79
+ throw new Error("included velocity task lost its baseline source");
80
+ }
81
+ return Object.freeze({
82
+ taskId: task.taskId,
83
+ source: task.baselineSource,
84
+ eventId: task.baselineEventId,
85
+ commitId: task.baselineCommitId,
86
+ });
87
+ }
88
+ function unavailableHistoryCauses(history) {
89
+ return history.history.status === "incomplete"
90
+ ? Object.freeze([observationCause("history_incomplete")])
91
+ : history.history.status === "unavailable"
92
+ ? Object.freeze([observationCause("history_unavailable")])
93
+ : Object.freeze([]);
94
+ }
95
+ function excludedTask(taskId, causes) {
96
+ return Object.freeze({
97
+ taskId,
98
+ causes: uniqueCauses(causes),
99
+ });
100
+ }
101
+ function completedSelection(tasks) {
102
+ const included = [];
103
+ const excluded = [];
104
+ for (const task of tasks) {
105
+ const causes = [];
106
+ if (task.coverage !== "complete" ||
107
+ task.firstStart === null ||
108
+ task.lastFinish === null) {
109
+ causes.push(observationCause("no_complete_sequence", {
110
+ taskId: task.taskId,
111
+ }));
112
+ }
113
+ if (task.plannedValue === null ||
114
+ task.plannedValue.unit !== "point") {
115
+ causes.push(observationCause("missing_baseline", {
116
+ taskId: task.taskId,
117
+ eventId: task.baselineEventId,
118
+ commitId: task.baselineCommitId,
119
+ }));
120
+ }
121
+ if (causes.length > 0) {
122
+ excluded.push(excludedTask(task.taskId, causes));
123
+ continue;
124
+ }
125
+ included.push(Object.freeze({
126
+ task,
127
+ baseline: exact(task.plannedValue),
128
+ }));
129
+ }
130
+ return Object.freeze({
131
+ included: Object.freeze(included),
132
+ excluded: Object.freeze(excluded),
133
+ });
134
+ }
135
+ function effortSelection(tasks) {
136
+ const included = [];
137
+ const excluded = [];
138
+ for (const task of tasks) {
139
+ const causes = [];
140
+ if (task.coverage !== "complete" && task.coverage !== "finish_only") {
141
+ causes.push(observationCause("no_complete_sequence", {
142
+ taskId: task.taskId,
143
+ }));
144
+ }
145
+ if (task.plannedValue === null ||
146
+ task.plannedValue.unit !== "point") {
147
+ causes.push(observationCause("missing_baseline", {
148
+ taskId: task.taskId,
149
+ eventId: task.baselineEventId,
150
+ commitId: task.baselineCommitId,
151
+ }));
152
+ }
153
+ if (task.effort === null || task.effort.unit !== "person_hour") {
154
+ causes.push(observationCause("missing_effort", {
155
+ taskId: task.taskId,
156
+ }));
157
+ }
158
+ if (causes.length > 0) {
159
+ excluded.push(excludedTask(task.taskId, causes));
160
+ continue;
161
+ }
162
+ included.push(Object.freeze({
163
+ task,
164
+ baseline: exact(task.plannedValue),
165
+ }));
166
+ }
167
+ return Object.freeze({
168
+ included: Object.freeze(included),
169
+ excluded: Object.freeze(excluded),
170
+ });
171
+ }
172
+ function pointTotal(tasks) {
173
+ return tasks.reduce((total, task) => add(total, task.baseline), ZERO);
174
+ }
175
+ function unavailableFromEmptySelection(selectedTaskIds, selection) {
176
+ if (selectedTaskIds.length === 0) {
177
+ return Object.freeze([observationCause("no_selected_tasks")]);
178
+ }
179
+ if (selection.included.length > 0)
180
+ return Object.freeze([]);
181
+ return uniqueCauses(selection.excluded.flatMap(({ causes }) => causes));
182
+ }
183
+ function calendarBounds(tasks) {
184
+ let start = null;
185
+ let finish = null;
186
+ for (const { task } of tasks) {
187
+ if (task.firstStart === null || task.lastFinish === null)
188
+ continue;
189
+ if (start === null || compareCalendar(task.firstStart, start) < 0) {
190
+ start = task.firstStart;
191
+ }
192
+ if (finish === null || compareCalendar(task.lastFinish, finish) > 0) {
193
+ finish = task.lastFinish;
194
+ }
195
+ }
196
+ return Object.freeze({ start, finish });
197
+ }
198
+ function velocityToken(rate, unit) {
199
+ if (rate.numerator <= 0n)
200
+ return null;
201
+ return `${serializeExactDurationSource(rate, "point").token}/${serializeExactDurationSource(ONE, unit).token}`;
202
+ }
203
+ function candidate(parts) {
204
+ const causes = uniqueCauses(parts.unavailableCauses);
205
+ const rateValue = parts.numerator === null ||
206
+ parts.denominator === null ||
207
+ compare(parts.denominator, ZERO) <= 0
208
+ ? null
209
+ : divide(parts.numerator, parts.denominator);
210
+ const available = causes.length === 0 && rateValue !== null;
211
+ return Object.freeze({
212
+ id: parts.id,
213
+ measure: parts.measure,
214
+ evidenceClass: parts.evidenceClass,
215
+ state: available ? "available" : "unavailable",
216
+ numerator: parts.numerator === null ? null : quantity(parts.numerator, "point"),
217
+ denominator: parts.denominator === null
218
+ ? null
219
+ : quantity(parts.denominator, parts.denominatorUnit),
220
+ rate: !available || rateValue === null
221
+ ? null
222
+ : Object.freeze({
223
+ numerator: rateValue.numerator.toString(),
224
+ denominator: rateValue.denominator.toString(),
225
+ unit: parts.rateUnit,
226
+ }),
227
+ adoptableVelocityToken: !available ||
228
+ rateValue === null ||
229
+ parts.adoptableUnit === undefined
230
+ ? null
231
+ : velocityToken(rateValue, parts.adoptableUnit),
232
+ includedTaskIds: Object.freeze(parts.included.map(({ task }) => task.taskId)),
233
+ excluded: Object.freeze([...parts.excluded]),
234
+ observationStart: parts.observationStart,
235
+ observationFinish: parts.observationFinish,
236
+ baselineSources: Object.freeze(parts.included.map(({ task }) => baselineSource(task))),
237
+ qualifiers: Object.freeze([...(parts.qualifiers ?? [])]),
238
+ unavailableCauses: causes,
239
+ });
240
+ }
241
+ function elapsedCandidate(history, selectedTaskIds, tasks) {
242
+ const selection = completedSelection(tasks);
243
+ const bounds = calendarBounds(selection.included);
244
+ let denominator = null;
245
+ const causes = [
246
+ ...unavailableHistoryCauses(history),
247
+ ...unavailableFromEmptySelection(selectedTaskIds, selection),
248
+ ];
249
+ if (bounds.start !== null && bounds.finish !== null) {
250
+ const start = targetInstant(bounds.start);
251
+ const finish = targetInstant(bounds.finish);
252
+ denominator = divide(subtract(finish, start), rational(3600n));
253
+ if (compare(denominator, ZERO) <= 0) {
254
+ causes.push(observationCause("non_positive_window"));
255
+ }
256
+ }
257
+ return candidate({
258
+ id: "declared_elapsed_hour_throughput",
259
+ measure: "elapsed_hour_throughput",
260
+ evidenceClass: "declared_actual",
261
+ numerator: selection.included.length === 0
262
+ ? null
263
+ : pointTotal(selection.included),
264
+ denominator,
265
+ denominatorUnit: "hour",
266
+ rateUnit: "point_per_hour",
267
+ included: selection.included,
268
+ excluded: selection.excluded,
269
+ observationStart: bounds.start,
270
+ observationFinish: bounds.finish,
271
+ unavailableCauses: causes,
272
+ adoptableUnit: "hour",
273
+ });
274
+ }
275
+ function activeIntervals(task) {
276
+ if (task.coverage !== "complete" ||
277
+ task.firstStart === null ||
278
+ task.lastFinish === null) {
279
+ return null;
280
+ }
281
+ const intervals = [];
282
+ let start = task.firstStart;
283
+ for (const suspension of task.suspensionIntervals) {
284
+ if (suspension.finish === null)
285
+ return null;
286
+ const activeFinish = suspension.start;
287
+ if (compareCalendar(activeFinish, start) < 0)
288
+ return null;
289
+ if (compareCalendar(activeFinish, start) > 0) {
290
+ intervals.push(Object.freeze({ start, finish: activeFinish }));
291
+ }
292
+ start = suspension.finish;
293
+ }
294
+ if (compareCalendar(task.lastFinish, start) < 0)
295
+ return null;
296
+ if (compareCalendar(task.lastFinish, start) > 0) {
297
+ intervals.push(Object.freeze({ start, finish: task.lastFinish }));
298
+ }
299
+ return Object.freeze(intervals);
300
+ }
301
+ function isLocalMidnight(value) {
302
+ return (value.kind === "date_time" &&
303
+ value.hour === 0 &&
304
+ value.minute === 0 &&
305
+ BigInt(value.second.numerator) === 0n);
306
+ }
307
+ function activeDateCount(intervals) {
308
+ const dates = new Set();
309
+ for (const interval of intervals) {
310
+ let first = civilDayNumber(interval.start);
311
+ let last = civilDayNumber(interval.finish);
312
+ if (isLocalMidnight(interval.finish))
313
+ last -= 1n;
314
+ while (first <= last) {
315
+ dates.add(first.toString());
316
+ first += 1n;
317
+ }
318
+ }
319
+ return rational(BigInt(dates.size));
320
+ }
321
+ function activeDateCandidate(history, selectedTaskIds, tasks) {
322
+ const initial = completedSelection(tasks);
323
+ const included = [];
324
+ const excluded = [...initial.excluded];
325
+ const intervals = [];
326
+ for (const item of initial.included) {
327
+ const taskIntervals = activeIntervals(item.task);
328
+ if (taskIntervals === null || taskIntervals.length === 0) {
329
+ excluded.push(excludedTask(item.task.taskId, [
330
+ observationCause("incomplete_active_intervals", {
331
+ taskId: item.task.taskId,
332
+ }),
333
+ ]));
334
+ continue;
335
+ }
336
+ included.push(item);
337
+ intervals.push(...taskIntervals);
338
+ }
339
+ const selection = Object.freeze({
340
+ included: Object.freeze(included),
341
+ excluded: Object.freeze(excluded),
342
+ });
343
+ const bounds = calendarBounds(selection.included);
344
+ const causes = [
345
+ ...unavailableHistoryCauses(history),
346
+ ...unavailableFromEmptySelection(selectedTaskIds, selection),
347
+ ];
348
+ const offsets = new Set(intervals.flatMap(({ start, finish }) => [start, finish].flatMap((value) => value.kind === "date_time" ? [value.offsetMinutes] : [])));
349
+ if (intervals.some(({ start, finish }) => start.kind !== "date_time" || finish.kind !== "date_time")) {
350
+ causes.push(observationCause("incomplete_active_intervals"));
351
+ }
352
+ if (offsets.size > 1) {
353
+ causes.push(observationCause("mixed_offsets"));
354
+ }
355
+ const denominator = intervals.length === 0 ||
356
+ offsets.size !== 1 ||
357
+ causes.some(({ cause }) => cause === "incomplete_active_intervals")
358
+ ? null
359
+ : activeDateCount(intervals);
360
+ if (denominator !== null && compare(denominator, ZERO) <= 0) {
361
+ causes.push(observationCause("non_positive_window"));
362
+ }
363
+ return candidate({
364
+ id: "declared_active_date_throughput",
365
+ measure: "active_date_throughput",
366
+ evidenceClass: "declared_actual",
367
+ numerator: selection.included.length === 0
368
+ ? null
369
+ : pointTotal(selection.included),
370
+ denominator,
371
+ denominatorUnit: "day",
372
+ rateUnit: "point_per_day",
373
+ included: selection.included,
374
+ excluded: selection.excluded,
375
+ observationStart: bounds.start,
376
+ observationFinish: bounds.finish,
377
+ unavailableCauses: causes,
378
+ adoptableUnit: "day",
379
+ });
380
+ }
381
+ function effortCandidate(history, selectedTaskIds, tasks) {
382
+ const selection = effortSelection(tasks);
383
+ const causes = [
384
+ ...unavailableHistoryCauses(history),
385
+ ...unavailableFromEmptySelection(selectedTaskIds, selection),
386
+ ];
387
+ const denominator = selection.included.length === 0
388
+ ? null
389
+ : selection.included.reduce((total, { task }) => add(total, exact(task.effort)), ZERO);
390
+ if (denominator !== null && compare(denominator, ZERO) <= 0) {
391
+ causes.push(observationCause("non_positive_window"));
392
+ }
393
+ const qualifiers = selection.included.some(({ task }) => task.baselineSource === "finish_snapshot")
394
+ ? ["finish_snapshot"]
395
+ : [];
396
+ return candidate({
397
+ id: "declared_effort_productivity",
398
+ measure: "effort_productivity",
399
+ evidenceClass: "declared_actual",
400
+ numerator: selection.included.length === 0
401
+ ? null
402
+ : pointTotal(selection.included),
403
+ denominator,
404
+ denominatorUnit: "person_hour",
405
+ rateUnit: "point_per_person_hour",
406
+ included: selection.included,
407
+ excluded: selection.excluded,
408
+ observationStart: null,
409
+ observationFinish: null,
410
+ qualifiers,
411
+ unavailableCauses: causes,
412
+ });
413
+ }
414
+ function recordedSelection(history, tasks) {
415
+ const samples = [];
416
+ const included = [];
417
+ const excluded = [];
418
+ for (const task of tasks) {
419
+ const causes = [];
420
+ if (task.plannedValue === null ||
421
+ task.plannedValue.unit !== "point") {
422
+ causes.push(observationCause("missing_baseline", {
423
+ taskId: task.taskId,
424
+ commitId: task.baselineCommitId,
425
+ }));
426
+ }
427
+ const transitions = history.gitRecordedTransitions.filter(({ taskId }) => taskId === task.taskId);
428
+ let finishIndex = -1;
429
+ for (let index = transitions.length - 1; index >= 0; index -= 1) {
430
+ const transition = transitions[index];
431
+ if (transition.toState === "done" &&
432
+ transition.recordedAt !== null &&
433
+ (task.baselineCommitId === null ||
434
+ transition.commitId === task.baselineCommitId)) {
435
+ finishIndex = index;
436
+ break;
437
+ }
438
+ }
439
+ let startIndex = -1;
440
+ for (let index = finishIndex - 1; index >= 0; index -= 1) {
441
+ const transition = transitions[index];
442
+ if (transition.toState === "active" && transition.recordedAt !== null) {
443
+ startIndex = index;
444
+ break;
445
+ }
446
+ }
447
+ if (startIndex < 0) {
448
+ causes.push(observationCause("git_recorded_start_missing", {
449
+ taskId: task.taskId,
450
+ }));
451
+ }
452
+ const finish = finishIndex < 0 ? undefined : transitions[finishIndex];
453
+ if (finish === undefined) {
454
+ causes.push(observationCause("git_recorded_finish_missing", {
455
+ taskId: task.taskId,
456
+ }));
457
+ }
458
+ if (causes.length > 0) {
459
+ excluded.push(excludedTask(task.taskId, causes));
460
+ continue;
461
+ }
462
+ const item = Object.freeze({
463
+ task,
464
+ baseline: exact(task.plannedValue),
465
+ });
466
+ included.push(item);
467
+ samples.push(Object.freeze({
468
+ included: item,
469
+ start: transitions[startIndex],
470
+ finish: finish,
471
+ }));
472
+ }
473
+ return Object.freeze({
474
+ samples: Object.freeze(samples),
475
+ selection: Object.freeze({
476
+ included: Object.freeze(included),
477
+ excluded: Object.freeze(excluded),
478
+ }),
479
+ });
480
+ }
481
+ function recordedCandidate(history, selectedTaskIds, tasks) {
482
+ const selected = recordedSelection(history, tasks);
483
+ let start = null;
484
+ let finish = null;
485
+ for (const sample of selected.samples) {
486
+ const sampleStart = sample.start.recordedAt;
487
+ const sampleFinish = sample.finish.recordedAt;
488
+ if (start === null || compareCalendar(sampleStart, start) < 0) {
489
+ start = sampleStart;
490
+ }
491
+ if (finish === null || compareCalendar(sampleFinish, finish) > 0) {
492
+ finish = sampleFinish;
493
+ }
494
+ }
495
+ const causes = [
496
+ ...unavailableHistoryCauses(history),
497
+ ...unavailableFromEmptySelection(selectedTaskIds, selected.selection),
498
+ ];
499
+ let denominator = null;
500
+ if (start !== null && finish !== null) {
501
+ denominator = divide(subtract(targetInstant(finish), targetInstant(start)), rational(3600n));
502
+ if (compare(denominator, ZERO) <= 0) {
503
+ causes.push(observationCause("non_positive_window"));
504
+ }
505
+ }
506
+ return candidate({
507
+ id: "git_recorded_elapsed_hour_throughput",
508
+ measure: "git_recorded_elapsed_hour_throughput",
509
+ evidenceClass: "git_recorded_transition",
510
+ numerator: selected.selection.included.length === 0
511
+ ? null
512
+ : pointTotal(selected.selection.included),
513
+ denominator,
514
+ denominatorUnit: "hour",
515
+ rateUnit: "point_per_hour",
516
+ included: selected.selection.included,
517
+ excluded: selected.selection.excluded,
518
+ observationStart: start,
519
+ observationFinish: finish,
520
+ qualifiers: ["recorded_not_actual"],
521
+ unavailableCauses: causes,
522
+ });
523
+ }
524
+ function observationDiagnostic(cause, taskId = null) {
525
+ return Object.freeze({
526
+ code: "PTOBS-101",
527
+ severity: "error",
528
+ message: "invalid velocity observation selection",
529
+ ...(taskId === null ? {} : { entityId: taskId }),
530
+ helpTopic: "project.observe-velocity",
531
+ data: Object.freeze({
532
+ cause,
533
+ task_id: taskId,
534
+ }),
535
+ });
536
+ }
537
+ function failedResult(history, evidence, selectedTaskIds, diagnostic) {
538
+ return Object.freeze({
539
+ ok: false,
540
+ modelVersion: VELOCITY_OBSERVATION_MODEL_VERSION,
541
+ documentId: history.documentId,
542
+ grammarVersion: history.grammarVersion,
543
+ history: history.history,
544
+ observation: Object.freeze({
545
+ id: "perttool.velocity-observation",
546
+ version: VELOCITY_OBSERVATION_MODEL_VERSION,
547
+ historyModelVersion: 1,
548
+ selectedTaskIds,
549
+ evidence,
550
+ candidates: Object.freeze([]),
551
+ }),
552
+ diagnostics: Object.freeze([diagnostic]),
553
+ });
554
+ }
555
+ export function observeProjectVelocity(history, request = {}) {
556
+ const evidence = request.evidence ?? "declared";
557
+ if (evidence !== "declared" &&
558
+ evidence !== "git_recorded" &&
559
+ evidence !== "all") {
560
+ return failedResult(history, "declared", Object.freeze([]), observationDiagnostic("unsupported_evidence"));
561
+ }
562
+ const requested = request.taskIds === undefined
563
+ ? history.tasks.map(({ taskId }) => taskId)
564
+ : [...request.taskIds];
565
+ const duplicate = requested.find((taskId, index) => requested.indexOf(taskId) !== index);
566
+ const selectedTaskIds = Object.freeze([...new Set(requested)].sort(compareStableStrings));
567
+ if (duplicate !== undefined) {
568
+ return failedResult(history, evidence, selectedTaskIds, observationDiagnostic("duplicate_task", duplicate));
569
+ }
570
+ if (history.history.status !== "unavailable") {
571
+ const known = new Set(history.tasks.map(({ taskId }) => taskId));
572
+ const unknown = selectedTaskIds.find((taskId) => !known.has(taskId));
573
+ if (unknown !== undefined) {
574
+ return failedResult(history, evidence, selectedTaskIds, observationDiagnostic("unknown_task", unknown));
575
+ }
576
+ }
577
+ const selected = history.tasks
578
+ .filter(({ taskId }) => selectedTaskIds.includes(taskId))
579
+ .sort((left, right) => compareStableStrings(left.taskId, right.taskId));
580
+ const candidates = [];
581
+ if (evidence === "declared" || evidence === "all") {
582
+ candidates.push(elapsedCandidate(history, selectedTaskIds, selected), activeDateCandidate(history, selectedTaskIds, selected), effortCandidate(history, selectedTaskIds, selected));
583
+ }
584
+ if (evidence === "git_recorded" || evidence === "all") {
585
+ candidates.push(recordedCandidate(history, selectedTaskIds, selected));
586
+ }
587
+ return Object.freeze({
588
+ ok: history.ok,
589
+ modelVersion: VELOCITY_OBSERVATION_MODEL_VERSION,
590
+ documentId: history.documentId,
591
+ grammarVersion: history.grammarVersion,
592
+ history: history.history,
593
+ observation: Object.freeze({
594
+ id: "perttool.velocity-observation",
595
+ version: VELOCITY_OBSERVATION_MODEL_VERSION,
596
+ historyModelVersion: 1,
597
+ selectedTaskIds,
598
+ evidence,
599
+ candidates: Object.freeze(candidates),
600
+ }),
601
+ diagnostics: history.diagnostics,
602
+ });
603
+ }
604
+ //# sourceMappingURL=velocity-observation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"velocity-observation.js","sourceRoot":"","sources":["../../src/history/velocity-observation.ts"],"names":[],"mappings":"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"}