perttool 0.7.1 → 0.8.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/CHANGELOG.md +33 -1
- package/README.md +94 -18
- package/dist/actuals/lifecycle.d.ts +6 -20
- package/dist/actuals/lifecycle.d.ts.map +1 -1
- package/dist/actuals/lifecycle.js +5 -176
- package/dist/actuals/lifecycle.js.map +1 -1
- package/dist/actuals/reduction.d.ts +20 -0
- package/dist/actuals/reduction.d.ts.map +1 -0
- package/dist/actuals/reduction.js +175 -0
- package/dist/actuals/reduction.js.map +1 -0
- package/dist/analysis/service.d.ts +33 -0
- package/dist/analysis/service.d.ts.map +1 -0
- package/dist/analysis/service.js +153 -0
- package/dist/analysis/service.js.map +1 -0
- package/dist/analysis/target-temporal-input.d.ts +88 -0
- package/dist/analysis/target-temporal-input.d.ts.map +1 -0
- package/dist/analysis/target-temporal-input.js +249 -0
- package/dist/analysis/target-temporal-input.js.map +1 -0
- package/dist/analysis/temporal-deadline.d.ts +1 -1
- package/dist/analysis/temporal-deadline.d.ts.map +1 -1
- package/dist/analysis/temporal-precedence.d.ts +1 -1
- package/dist/analysis/temporal-precedence.d.ts.map +1 -1
- package/dist/analysis/temporal-precedence.js +1 -1
- package/dist/analysis/temporal-precedence.js.map +1 -1
- package/dist/analysis/temporal-resource.d.ts +1 -1
- package/dist/analysis/temporal-resource.d.ts.map +1 -1
- package/dist/analysis/temporal-resource.js +1 -1
- package/dist/analysis/temporal-resource.js.map +1 -1
- package/dist/application/advance-history.d.ts +2 -1
- package/dist/application/advance-history.d.ts.map +1 -1
- package/dist/application/advance-history.js +1 -1
- package/dist/application/advance-history.js.map +1 -1
- package/dist/application/analyze.d.ts +1 -32
- package/dist/application/analyze.d.ts.map +1 -1
- package/dist/application/analyze.js +1 -152
- package/dist/application/analyze.js.map +1 -1
- package/dist/application/check.d.ts +1 -42
- package/dist/application/check.d.ts.map +1 -1
- package/dist/application/check.js +1 -109
- package/dist/application/check.js.map +1 -1
- package/dist/application/cli-facade.d.ts +85 -0
- package/dist/application/cli-facade.d.ts.map +1 -0
- package/dist/application/cli-facade.js +108 -0
- package/dist/application/cli-facade.js.map +1 -0
- package/dist/application/contract6-mutation.js +2 -2
- package/dist/application/contract6-mutation.js.map +1 -1
- package/dist/application/contract7-mermaid.d.ts.map +1 -1
- package/dist/application/contract7-mermaid.js +3 -3
- package/dist/application/contract7-mermaid.js.map +1 -1
- package/dist/application/contract7-source.d.ts +1 -7
- package/dist/application/contract7-source.d.ts.map +1 -1
- package/dist/application/contract7-source.js +4 -12
- package/dist/application/contract7-source.js.map +1 -1
- package/dist/application/editor-dag-focus.d.ts +52 -0
- package/dist/application/editor-dag-focus.d.ts.map +1 -0
- package/dist/application/editor-dag-focus.js +132 -0
- package/dist/application/editor-dag-focus.js.map +1 -0
- package/dist/application/format.js +2 -2
- package/dist/application/format.js.map +1 -1
- package/dist/application/mutate.d.ts +1 -26
- package/dist/application/mutate.d.ts.map +1 -1
- package/dist/application/mutate.js +1 -205
- package/dist/application/mutate.js.map +1 -1
- package/dist/application/next.js +2 -2
- package/dist/application/next.js.map +1 -1
- package/dist/application/target-actuals-advance.js +2 -2
- package/dist/application/target-actuals-advance.js.map +1 -1
- package/dist/application/target-actuals-analysis.js +2 -2
- package/dist/application/target-actuals-analysis.js.map +1 -1
- package/dist/application/target-actuals-mutation.d.ts.map +1 -1
- package/dist/application/target-actuals-mutation.js +6 -5
- package/dist/application/target-actuals-mutation.js.map +1 -1
- package/dist/application/target-assurance-analysis.js +2 -2
- package/dist/application/target-assurance-analysis.js.map +1 -1
- package/dist/application/target-assurance-write.d.ts +2 -1
- package/dist/application/target-assurance-write.d.ts.map +1 -1
- package/dist/application/target-assurance-write.js +36 -12
- package/dist/application/target-assurance-write.js.map +1 -1
- package/dist/application/target-governance-mutation.js +2 -2
- package/dist/application/target-governance-mutation.js.map +1 -1
- package/dist/application/target-historical-graph.d.ts +124 -0
- package/dist/application/target-historical-graph.d.ts.map +1 -0
- package/dist/application/target-historical-graph.js +547 -0
- package/dist/application/target-historical-graph.js.map +1 -0
- package/dist/application/target-mutate.d.ts +1 -17
- package/dist/application/target-mutate.d.ts.map +1 -1
- package/dist/application/target-mutate.js +1 -159
- package/dist/application/target-mutate.js.map +1 -1
- package/dist/application/target-project-history.d.ts +2 -1
- package/dist/application/target-project-history.d.ts.map +1 -1
- package/dist/application/target-project-history.js +3 -3
- package/dist/application/target-project-history.js.map +1 -1
- package/dist/application/target-temporal-analysis.js +2 -2
- package/dist/application/target-temporal-analysis.js.map +1 -1
- package/dist/application/target-temporal-input.d.ts +1 -87
- package/dist/application/target-temporal-input.d.ts.map +1 -1
- package/dist/application/target-temporal-input.js +1 -248
- package/dist/application/target-temporal-input.js.map +1 -1
- package/dist/application/target-unit-migration-candidate.js +2 -2
- package/dist/application/target-unit-migration-candidate.js.map +1 -1
- package/dist/assurance/advance.js +2 -2
- package/dist/assurance/advance.js.map +1 -1
- package/dist/assurance/canonical.js +2 -2
- package/dist/assurance/canonical.js.map +1 -1
- package/dist/assurance/compatibility.js +2 -2
- package/dist/assurance/compatibility.js.map +1 -1
- package/dist/assurance/mermaid.d.ts +4 -2
- package/dist/assurance/mermaid.d.ts.map +1 -1
- package/dist/assurance/mermaid.js +11 -7
- package/dist/assurance/mermaid.js.map +1 -1
- package/dist/assurance/mutation.d.ts.map +1 -1
- package/dist/assurance/mutation.js +9 -23
- package/dist/assurance/mutation.js.map +1 -1
- package/dist/cli.js +66 -26
- package/dist/cli.js.map +1 -1
- package/dist/command/assurance-discovery.d.ts.map +1 -1
- package/dist/command/assurance-discovery.js +62 -2
- package/dist/command/assurance-discovery.js.map +1 -1
- package/dist/command/assurance-usage.d.ts.map +1 -1
- package/dist/command/assurance-usage.js +11 -0
- package/dist/command/assurance-usage.js.map +1 -1
- package/dist/conversion/mermaid-import.js +3 -3
- package/dist/conversion/mermaid-import.js.map +1 -1
- package/dist/conversion/mermaid.d.ts +1 -1
- package/dist/conversion/mermaid.d.ts.map +1 -1
- package/dist/conversion/mermaid.js +4 -4
- package/dist/conversion/mermaid.js.map +1 -1
- package/dist/core/index.d.ts +33 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/source.d.ts +8 -0
- package/dist/core/source.d.ts.map +1 -0
- package/dist/core/source.js +11 -0
- package/dist/core/source.js.map +1 -0
- package/dist/formatter/source-formatter.d.ts +1 -1
- package/dist/formatter/source-formatter.d.ts.map +1 -1
- package/dist/formatter/source-formatter.js +1 -1
- package/dist/formatter/source-formatter.js.map +1 -1
- package/dist/guidance/validator.js +2 -2
- package/dist/guidance/validator.js.map +1 -1
- package/dist/help/assurance-guide.d.ts.map +1 -1
- package/dist/help/assurance-guide.js +78 -0
- package/dist/help/assurance-guide.js.map +1 -1
- package/dist/history/git-probe.d.ts +71 -0
- package/dist/history/git-probe.d.ts.map +1 -1
- package/dist/history/git-probe.js +517 -0
- package/dist/history/git-probe.js.map +1 -1
- package/dist/history/historical-graph.d.ts +174 -0
- package/dist/history/historical-graph.d.ts.map +1 -0
- package/dist/history/historical-graph.js +870 -0
- package/dist/history/historical-graph.js.map +1 -0
- package/dist/history/historical-transition.d.ts +311 -0
- package/dist/history/historical-transition.d.ts.map +1 -0
- package/dist/history/historical-transition.js +998 -0
- package/dist/history/historical-transition.js.map +1 -0
- package/dist/history/project-history.d.ts.map +1 -1
- package/dist/history/project-history.js +2 -2
- package/dist/history/project-history.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/io/document-file.js +2 -2
- package/dist/io/document-file.js.map +1 -1
- package/dist/io/safe-write.js +1 -1
- package/dist/io/safe-write.js.map +1 -1
- package/dist/model/sha256.d.ts +5 -0
- package/dist/model/sha256.d.ts.map +1 -0
- package/dist/model/sha256.js +105 -0
- package/dist/model/sha256.js.map +1 -0
- package/dist/mutation/advance.js +3 -3
- package/dist/mutation/advance.js.map +1 -1
- package/dist/mutation/diagnostics.d.ts +2 -2
- package/dist/mutation/diagnostics.d.ts.map +1 -1
- package/dist/mutation/diagnostics.js.map +1 -1
- package/dist/mutation/planner.d.ts +27 -0
- package/dist/mutation/planner.d.ts.map +1 -0
- package/dist/mutation/planner.js +206 -0
- package/dist/mutation/planner.js.map +1 -0
- package/dist/mutation/source.d.ts +2 -1
- package/dist/mutation/source.d.ts.map +1 -1
- package/dist/mutation/source.js +14 -0
- package/dist/mutation/source.js.map +1 -1
- package/dist/mutation/target-planner.d.ts +18 -0
- package/dist/mutation/target-planner.d.ts.map +1 -0
- package/dist/mutation/target-planner.js +160 -0
- package/dist/mutation/target-planner.js.map +1 -0
- package/dist/mutation/task.d.ts.map +1 -1
- package/dist/mutation/task.js +19 -11
- package/dist/mutation/task.js.map +1 -1
- package/dist/mutation/types.d.ts +1 -1
- package/dist/mutation/types.d.ts.map +1 -1
- package/dist/node/historical-host.d.ts +6 -0
- package/dist/node/historical-host.d.ts.map +1 -0
- package/dist/node/historical-host.js +8 -0
- package/dist/node/historical-host.js.map +1 -0
- package/dist/node/host.d.ts +3 -0
- package/dist/node/host.d.ts.map +1 -0
- package/dist/node/host.js +48 -0
- package/dist/node/host.js.map +1 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +2 -0
- package/dist/node/index.js.map +1 -0
- package/dist/perttool-vscode-private-0.0.0-d1578b9.vsix +0 -0
- package/dist/ports/node-host.d.ts +41 -0
- package/dist/ports/node-host.d.ts.map +1 -0
- package/dist/ports/node-host.js +2 -0
- package/dist/ports/node-host.js.map +1 -0
- package/dist/recommendation/override.d.ts +40 -2
- package/dist/recommendation/override.d.ts.map +1 -1
- package/dist/recommendation/override.js +5 -6
- package/dist/recommendation/override.js.map +1 -1
- package/dist/schema/registry.d.ts.map +1 -1
- package/dist/schema/registry.js +1 -0
- package/dist/schema/registry.js.map +1 -1
- package/dist/semantic/check.d.ts +43 -0
- package/dist/semantic/check.d.ts.map +1 -0
- package/dist/semantic/check.js +110 -0
- package/dist/semantic/check.js.map +1 -0
- package/dist/session/document-session.d.ts +109 -0
- package/dist/session/document-session.d.ts.map +1 -0
- package/dist/session/document-session.js +432 -0
- package/dist/session/document-session.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +18 -4
- package/schemas/Perttool.HistoricalGraphResult.v1.schema.json +654 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { instantKey } from "../model/calendar-arithmetic.js";
|
|
2
|
+
import { compareStableStrings } from "../model/diagnostics.js";
|
|
3
|
+
import { add, compare, divide, rational, subtract, ZERO, } from "../model/rational.js";
|
|
4
|
+
import { fieldNamed } from "../model/syntax.js";
|
|
5
|
+
import { projectActualsSourceModel, workEventsForTask, } from "./source.js";
|
|
6
|
+
const eventKindOrder = Object.freeze({
|
|
7
|
+
start: 0,
|
|
8
|
+
suspend: 1,
|
|
9
|
+
resume: 2,
|
|
10
|
+
finish: 3,
|
|
11
|
+
});
|
|
12
|
+
export function actualsDiagnostic(code, message, cause, entityId, span, data = {}) {
|
|
13
|
+
return Object.freeze({
|
|
14
|
+
code,
|
|
15
|
+
severity: "error",
|
|
16
|
+
message,
|
|
17
|
+
...(entityId === null ? {} : { entityId }),
|
|
18
|
+
...(span === undefined ? {} : { span }),
|
|
19
|
+
helpTopic: "syntax.work-event",
|
|
20
|
+
data: Object.freeze({ cause, ...data }),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function eventInstant(event) {
|
|
24
|
+
return instantKey(event.occurredAt);
|
|
25
|
+
}
|
|
26
|
+
function compareEvents(left, right) {
|
|
27
|
+
const instantOrder = compare(eventInstant(left), eventInstant(right));
|
|
28
|
+
if (instantOrder !== 0)
|
|
29
|
+
return instantOrder;
|
|
30
|
+
const kindOrder = eventKindOrder[left.kind] - eventKindOrder[right.kind];
|
|
31
|
+
return kindOrder !== 0
|
|
32
|
+
? kindOrder
|
|
33
|
+
: compareStableStrings(left.id, right.id);
|
|
34
|
+
}
|
|
35
|
+
function sequenceFailure(event, cause) {
|
|
36
|
+
return Object.freeze({
|
|
37
|
+
ok: false,
|
|
38
|
+
coverage: "unavailable",
|
|
39
|
+
state: null,
|
|
40
|
+
derivedActiveTime: null,
|
|
41
|
+
diagnostics: Object.freeze([
|
|
42
|
+
actualsDiagnostic("PTACT-104", "invalid work-event lifecycle sequence", cause, event.id, event.idSpan),
|
|
43
|
+
]),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export function reduceTaskLifecycle(events) {
|
|
47
|
+
if (events.length === 0) {
|
|
48
|
+
return Object.freeze({
|
|
49
|
+
ok: true,
|
|
50
|
+
coverage: "unrecorded",
|
|
51
|
+
state: null,
|
|
52
|
+
derivedActiveTime: null,
|
|
53
|
+
diagnostics: Object.freeze([]),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const ordered = [...events].sort(compareEvents);
|
|
57
|
+
for (let index = 1; index < ordered.length; index += 1) {
|
|
58
|
+
const previous = ordered[index - 1];
|
|
59
|
+
const current = ordered[index];
|
|
60
|
+
if (compare(eventInstant(previous), eventInstant(current)) === 0 &&
|
|
61
|
+
previous.kind === current.kind) {
|
|
62
|
+
return sequenceFailure(current, "duplicate_kind_at_instant");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
let state = null;
|
|
66
|
+
let coverage = "open";
|
|
67
|
+
let activeIntervalStart = null;
|
|
68
|
+
let derivedActiveTime = ZERO;
|
|
69
|
+
for (const [index, event] of ordered.entries()) {
|
|
70
|
+
const instant = eventInstant(event);
|
|
71
|
+
if (state === "done")
|
|
72
|
+
return sequenceFailure(event, "event_after_finish");
|
|
73
|
+
switch (event.kind) {
|
|
74
|
+
case "start":
|
|
75
|
+
if (index !== 0 || state !== null) {
|
|
76
|
+
return sequenceFailure(event, "invalid_transition");
|
|
77
|
+
}
|
|
78
|
+
state = "active";
|
|
79
|
+
activeIntervalStart = instant;
|
|
80
|
+
break;
|
|
81
|
+
case "suspend":
|
|
82
|
+
if (state !== "active" || activeIntervalStart === null) {
|
|
83
|
+
return sequenceFailure(event, "invalid_transition");
|
|
84
|
+
}
|
|
85
|
+
derivedActiveTime = add(derivedActiveTime, subtract(instant, activeIntervalStart));
|
|
86
|
+
if (derivedActiveTime.numerator < 0n) {
|
|
87
|
+
return sequenceFailure(event, "invalid_transition");
|
|
88
|
+
}
|
|
89
|
+
state = "suspended";
|
|
90
|
+
activeIntervalStart = null;
|
|
91
|
+
break;
|
|
92
|
+
case "resume":
|
|
93
|
+
if (state !== "suspended") {
|
|
94
|
+
return sequenceFailure(event, "invalid_transition");
|
|
95
|
+
}
|
|
96
|
+
state = "active";
|
|
97
|
+
activeIntervalStart = instant;
|
|
98
|
+
break;
|
|
99
|
+
case "finish":
|
|
100
|
+
if (index === 0 && state === null) {
|
|
101
|
+
state = "done";
|
|
102
|
+
coverage = "finish_only";
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
if (state !== "active" && state !== "suspended") {
|
|
106
|
+
return sequenceFailure(event, "invalid_transition");
|
|
107
|
+
}
|
|
108
|
+
if (state === "active" && activeIntervalStart !== null) {
|
|
109
|
+
derivedActiveTime = add(derivedActiveTime, subtract(instant, activeIntervalStart));
|
|
110
|
+
if (derivedActiveTime.numerator < 0n) {
|
|
111
|
+
return sequenceFailure(event, "invalid_transition");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
state = "done";
|
|
115
|
+
activeIntervalStart = null;
|
|
116
|
+
coverage = "complete";
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return Object.freeze({
|
|
121
|
+
ok: true,
|
|
122
|
+
coverage,
|
|
123
|
+
state,
|
|
124
|
+
derivedActiveTime: coverage === "complete"
|
|
125
|
+
? divide(derivedActiveTime, rational(3600n))
|
|
126
|
+
: null,
|
|
127
|
+
diagnostics: Object.freeze([]),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
export function taskStatus(task) {
|
|
131
|
+
return (fieldNamed(task, "status")?.value ?? "planned");
|
|
132
|
+
}
|
|
133
|
+
export function taskStatusSpan(task) {
|
|
134
|
+
return fieldNamed(task, "status")?.valueSpan ?? task.idSpan;
|
|
135
|
+
}
|
|
136
|
+
export function validateStoredLifecycleState(validated) {
|
|
137
|
+
const model = projectActualsSourceModel(validated);
|
|
138
|
+
const diagnostics = [];
|
|
139
|
+
for (const task of validated.document.declarations) {
|
|
140
|
+
if (task.kind !== "task")
|
|
141
|
+
continue;
|
|
142
|
+
const events = workEventsForTask(model, task.id);
|
|
143
|
+
const reduction = reduceTaskLifecycle(events);
|
|
144
|
+
if (!reduction.ok) {
|
|
145
|
+
diagnostics.push(...reduction.diagnostics);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (reduction.coverage === "unrecorded")
|
|
149
|
+
continue;
|
|
150
|
+
const stored = taskStatus(task);
|
|
151
|
+
if (reduction.state !== stored) {
|
|
152
|
+
diagnostics.push(actualsDiagnostic("PTACT-104", "invalid work-event lifecycle sequence", "state_event_mismatch", task.id, taskStatusSpan(task), {
|
|
153
|
+
stored_state: stored,
|
|
154
|
+
event_state: reduction.state,
|
|
155
|
+
}));
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (reduction.coverage !== "complete")
|
|
159
|
+
continue;
|
|
160
|
+
const finish = events.find(({ kind }) => kind === "finish");
|
|
161
|
+
if (finish?.activeTime !== null &&
|
|
162
|
+
finish?.activeTime !== undefined &&
|
|
163
|
+
reduction.derivedActiveTime !== null &&
|
|
164
|
+
compare(finish.activeTime.value, reduction.derivedActiveTime) !== 0) {
|
|
165
|
+
diagnostics.push(actualsDiagnostic("PTACT-107", "explicit active time differs from the event-derived active time", "active_time_mismatch", finish.id, finish.activeTime.valueSpan, {
|
|
166
|
+
explicit_numerator: finish.activeTime.value.numerator.toString(),
|
|
167
|
+
explicit_denominator: finish.activeTime.value.denominator.toString(),
|
|
168
|
+
derived_numerator: reduction.derivedActiveTime.numerator.toString(),
|
|
169
|
+
derived_denominator: reduction.derivedActiveTime.denominator.toString(),
|
|
170
|
+
}));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return Object.freeze(diagnostics);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=reduction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reduction.js","sourceRoot":"","sources":["../../src/actuals/reduction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Diagnostic } from "../model/diagnostics.js";
|
|
2
|
+
import type { DocumentNode } from "../model/syntax.js";
|
|
3
|
+
import type { PrecedenceResult } from "../analysis/precedence.js";
|
|
4
|
+
import type { ResourceScheduleResult } from "../analysis/resource.js";
|
|
5
|
+
import type { Rational } from "../model/rational.js";
|
|
6
|
+
import type { DurationUnit, Velocity, VelocityConversion } from "../model/units.js";
|
|
7
|
+
export type AnalysisMode = "precedence" | "resource" | "both";
|
|
8
|
+
export interface AnalyzeOptions {
|
|
9
|
+
readonly mode?: AnalysisMode;
|
|
10
|
+
readonly capacityOverrides?: ReadonlyMap<string, number>;
|
|
11
|
+
readonly maxPaths?: number;
|
|
12
|
+
readonly precision?: number;
|
|
13
|
+
readonly maxDiagnostics?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface AnalysisResult {
|
|
16
|
+
readonly ok: boolean;
|
|
17
|
+
readonly document: DocumentNode;
|
|
18
|
+
readonly documentId: string | null;
|
|
19
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
20
|
+
readonly diagnosticsTruncated: boolean;
|
|
21
|
+
readonly mode: AnalysisMode;
|
|
22
|
+
readonly precision: number;
|
|
23
|
+
readonly capacityOverrides: ReadonlyMap<string, number>;
|
|
24
|
+
readonly durationUnit: DurationUnit | null;
|
|
25
|
+
readonly velocity: Velocity | null;
|
|
26
|
+
readonly velocityForecast: VelocityConversion | null;
|
|
27
|
+
readonly criticalEpsilon: Rational | null;
|
|
28
|
+
readonly precedence: PrecedenceResult | null;
|
|
29
|
+
readonly resource: ResourceScheduleResult | null;
|
|
30
|
+
}
|
|
31
|
+
export declare function analyzeValidatedDocument(document: DocumentNode, documentId: string, initialDiagnostics: readonly Diagnostic[], diagnosticsAlreadyTruncated: boolean, options?: AnalyzeOptions): AnalysisResult;
|
|
32
|
+
export declare function analyzeDocument(text: string, options?: AnalyzeOptions): AnalysisResult;
|
|
33
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/analysis/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,yBAAyB,CAAC;AAQ3E,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AAIzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIpF,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAClD;AAgFD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,SAAS,UAAU,EAAE,EACzC,2BAA2B,EAAE,OAAO,EACpC,OAAO,GAAE,cAAmB,GAC3B,cAAc,CAoFhB;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,cAAc,CAgChB"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { hasErrors, limitDiagnostics, normalizeMaxDiagnostics, sortDiagnostics, } from "../model/diagnostics.js";
|
|
2
|
+
import { fieldNamed } from "../model/syntax.js";
|
|
3
|
+
import { buildResidualGraph } from "../analysis/graph.js";
|
|
4
|
+
import { analyzePrecedence } from "../analysis/precedence.js";
|
|
5
|
+
import { analyzeResources } from "../analysis/resource.js";
|
|
6
|
+
import { createVelocityConversion } from "../model/units.js";
|
|
7
|
+
import { checkDocument } from "../semantic/check.js";
|
|
8
|
+
function diagnostic(code, severity, message, entityId, related, helpTopic = "analysis.resources") {
|
|
9
|
+
return {
|
|
10
|
+
code,
|
|
11
|
+
severity,
|
|
12
|
+
message,
|
|
13
|
+
helpTopic,
|
|
14
|
+
...(entityId === undefined ? {} : { entityId }),
|
|
15
|
+
...(related === undefined || related.length === 0 ? {} : { related }),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function validateCapacityOverrides(graph, overrides) {
|
|
19
|
+
const diagnostics = [];
|
|
20
|
+
for (const [id] of overrides) {
|
|
21
|
+
if (!graph.resources.has(id)) {
|
|
22
|
+
diagnostics.push(diagnostic("PTSEM-206", "error", `resource ${id} in capacity override is undefined`, id));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (hasErrors(diagnostics))
|
|
26
|
+
return diagnostics;
|
|
27
|
+
const effective = new Map([...graph.resources].map(([id, resource]) => [id, overrides.get(id) ?? resource.capacity]));
|
|
28
|
+
for (const declaration of graph.document.declarations.filter((candidate) => candidate.kind === "task")) {
|
|
29
|
+
const requirements = (fieldNamed(declaration, "requires")?.value ?? []);
|
|
30
|
+
for (const requirement of requirements) {
|
|
31
|
+
if (requirement.units > effective.get(requirement.resourceId)) {
|
|
32
|
+
diagnostics.push({
|
|
33
|
+
code: "PTSEM-208",
|
|
34
|
+
severity: "error",
|
|
35
|
+
message: `requirement ${requirement.units} exceeds what-if capacity ${effective.get(requirement.resourceId)}`,
|
|
36
|
+
entityId: declaration.id,
|
|
37
|
+
span: requirement.unitsSpan,
|
|
38
|
+
helpTopic: "analysis.resources",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
for (const [id, resource] of graph.resources) {
|
|
44
|
+
const activeTasks = graph.document.declarations.filter((declaration) => declaration.kind === "task" && fieldNamed(declaration, "status")?.value === "active");
|
|
45
|
+
const usage = activeTasks.reduce((sum, task) => {
|
|
46
|
+
const requirements = (fieldNamed(task, "requires")?.value ?? []);
|
|
47
|
+
return sum + (requirements.find((requirement) => requirement.resourceId === id)?.units ?? 0);
|
|
48
|
+
}, 0);
|
|
49
|
+
if (usage > effective.get(id)) {
|
|
50
|
+
diagnostics.push({
|
|
51
|
+
code: "PTRES-202",
|
|
52
|
+
severity: "error",
|
|
53
|
+
message: `what-if capacity ${effective.get(id)} is less than active usage ${usage}`,
|
|
54
|
+
entityId: id,
|
|
55
|
+
span: fieldNamed(resource.declaration, "capacity").valueSpan,
|
|
56
|
+
helpTopic: "analysis.resources",
|
|
57
|
+
related: activeTasks
|
|
58
|
+
.filter((task) => {
|
|
59
|
+
const requirements = (fieldNamed(task, "requires")?.value ?? []);
|
|
60
|
+
return requirements.some((requirement) => requirement.resourceId === id);
|
|
61
|
+
})
|
|
62
|
+
.map((task) => ({ message: `active task ${task.id}`, span: task.idSpan })),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return diagnostics;
|
|
67
|
+
}
|
|
68
|
+
export function analyzeValidatedDocument(document, documentId, initialDiagnostics, diagnosticsAlreadyTruncated, options = {}) {
|
|
69
|
+
const mode = options.mode ?? "both";
|
|
70
|
+
const maxPaths = options.maxPaths ?? 1;
|
|
71
|
+
const precision = options.precision ?? 3;
|
|
72
|
+
const maxDiagnostics = normalizeMaxDiagnostics(options.maxDiagnostics);
|
|
73
|
+
const overrides = options.capacityOverrides ?? new Map();
|
|
74
|
+
const diagnostics = [...initialDiagnostics];
|
|
75
|
+
const graph = buildResidualGraph(document);
|
|
76
|
+
diagnostics.push(...validateCapacityOverrides(graph, overrides));
|
|
77
|
+
if (hasErrors(diagnostics)) {
|
|
78
|
+
const limited = limitDiagnostics(sortDiagnostics(diagnostics), maxDiagnostics);
|
|
79
|
+
return {
|
|
80
|
+
ok: false,
|
|
81
|
+
document,
|
|
82
|
+
documentId,
|
|
83
|
+
diagnostics: limited.diagnostics,
|
|
84
|
+
diagnosticsTruncated: diagnosticsAlreadyTruncated || limited.truncated,
|
|
85
|
+
mode,
|
|
86
|
+
precision,
|
|
87
|
+
capacityOverrides: overrides,
|
|
88
|
+
durationUnit: graph.durationUnit,
|
|
89
|
+
velocity: graph.velocity,
|
|
90
|
+
velocityForecast: createVelocityConversion(graph.durationUnit, graph.velocity),
|
|
91
|
+
criticalEpsilon: graph.criticalEpsilon,
|
|
92
|
+
precedence: null,
|
|
93
|
+
resource: null,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const internalPrecedence = analyzePrecedence(graph, maxPaths);
|
|
97
|
+
const resource = mode === "precedence"
|
|
98
|
+
? null
|
|
99
|
+
: analyzeResources(graph, internalPrecedence, overrides, maxPaths);
|
|
100
|
+
const precedence = mode === "resource" ? null : internalPrecedence;
|
|
101
|
+
if (precedence?.critical.pathsTruncated === true ||
|
|
102
|
+
resource?.scheduleCritical.pathsTruncated === true) {
|
|
103
|
+
diagnostics.push(diagnostic("PTDAG-302", "warning", `critical path enumeration was truncated at max-paths ${maxPaths}`, undefined, undefined, "analysis"));
|
|
104
|
+
}
|
|
105
|
+
if (resource?.conditionalOnBlocksResolved === true) {
|
|
106
|
+
diagnostics.push(diagnostic("PTRES-303", "warning", "resource schedule is conditional on blocked tasks being resolved at time 0", resource.blockedTaskIds[0]));
|
|
107
|
+
}
|
|
108
|
+
const limited = limitDiagnostics(sortDiagnostics(diagnostics), maxDiagnostics);
|
|
109
|
+
return {
|
|
110
|
+
ok: !hasErrors(diagnostics),
|
|
111
|
+
document,
|
|
112
|
+
documentId,
|
|
113
|
+
diagnostics: limited.diagnostics,
|
|
114
|
+
diagnosticsTruncated: diagnosticsAlreadyTruncated || limited.truncated,
|
|
115
|
+
mode,
|
|
116
|
+
precision,
|
|
117
|
+
capacityOverrides: overrides,
|
|
118
|
+
durationUnit: graph.durationUnit,
|
|
119
|
+
velocity: graph.velocity,
|
|
120
|
+
velocityForecast: createVelocityConversion(graph.durationUnit, graph.velocity),
|
|
121
|
+
criticalEpsilon: graph.criticalEpsilon,
|
|
122
|
+
precedence,
|
|
123
|
+
resource,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export function analyzeDocument(text, options = {}) {
|
|
127
|
+
const mode = options.mode ?? "both";
|
|
128
|
+
const precision = options.precision ?? 3;
|
|
129
|
+
const maxDiagnostics = normalizeMaxDiagnostics(options.maxDiagnostics);
|
|
130
|
+
const overrides = options.capacityOverrides ?? new Map();
|
|
131
|
+
const checked = checkDocument(text, { maxDiagnostics });
|
|
132
|
+
const diagnostics = [...checked.diagnostics];
|
|
133
|
+
if (!checked.ok) {
|
|
134
|
+
return {
|
|
135
|
+
ok: false,
|
|
136
|
+
document: checked.document,
|
|
137
|
+
documentId: checked.documentId,
|
|
138
|
+
diagnostics,
|
|
139
|
+
diagnosticsTruncated: checked.diagnosticsTruncated,
|
|
140
|
+
mode,
|
|
141
|
+
precision,
|
|
142
|
+
capacityOverrides: overrides,
|
|
143
|
+
durationUnit: null,
|
|
144
|
+
velocity: null,
|
|
145
|
+
velocityForecast: null,
|
|
146
|
+
criticalEpsilon: null,
|
|
147
|
+
precedence: null,
|
|
148
|
+
resource: null,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return analyzeValidatedDocument(checked.document, checked.documentId, diagnostics, checked.diagnosticsTruncated, options);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/analysis/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { Diagnostic } from "../model/diagnostics.js";
|
|
2
|
+
import type { DocumentNode, TargetDeclarationKind } from "../model/syntax.js";
|
|
3
|
+
import { CALENDAR_ARITHMETIC_IDENTITY, type CalendarDifference, type CalendarUnavailableCause } from "../model/calendar-arithmetic.js";
|
|
4
|
+
import { type TargetCalendarValue } from "../model/target-calendar.js";
|
|
5
|
+
import type { CalendarUnit, DurationUnit } from "../model/units.js";
|
|
6
|
+
import type { TargetGrammar3Capability, TargetGrammar4Capability } from "../parser/document-parser.js";
|
|
7
|
+
import { type TargetGrammar3ValidatedDocument, type TargetGrammar4ValidatedDocument, type TargetGrammar5ValidatedDocument, type TargetValidationOptions } from "../semantic/target-validator.js";
|
|
8
|
+
export interface TargetTemporalCause {
|
|
9
|
+
readonly cause: CalendarUnavailableCause;
|
|
10
|
+
readonly underlyingCause: null;
|
|
11
|
+
readonly subjectKind: "project" | "milestone" | "task" | null;
|
|
12
|
+
readonly subjectId: string | null;
|
|
13
|
+
readonly taskId: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface TargetTemporalExactValue {
|
|
16
|
+
readonly numerator: bigint;
|
|
17
|
+
readonly denominator: bigint;
|
|
18
|
+
readonly unit: DurationUnit;
|
|
19
|
+
}
|
|
20
|
+
export interface TargetCalendarDifference {
|
|
21
|
+
readonly kind: CalendarDifference["kind"];
|
|
22
|
+
readonly exact: {
|
|
23
|
+
readonly numerator: bigint;
|
|
24
|
+
readonly denominator: bigint;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface TargetEffectiveProjection {
|
|
28
|
+
readonly baseUnit: DurationUnit;
|
|
29
|
+
readonly effectiveUnit: CalendarUnit;
|
|
30
|
+
readonly qualifier: "base_unit" | "velocity_forecast";
|
|
31
|
+
readonly velocity: {
|
|
32
|
+
readonly points: TargetTemporalExactValue & {
|
|
33
|
+
readonly unit: "point";
|
|
34
|
+
};
|
|
35
|
+
readonly period: TargetTemporalExactValue & {
|
|
36
|
+
readonly unit: CalendarUnit;
|
|
37
|
+
};
|
|
38
|
+
} | null;
|
|
39
|
+
}
|
|
40
|
+
export interface TargetTemporalRelationship {
|
|
41
|
+
readonly state: "unavailable" | "available";
|
|
42
|
+
readonly calendarDifference: TargetCalendarDifference | null;
|
|
43
|
+
readonly baseUnitValue: TargetTemporalExactValue | null;
|
|
44
|
+
readonly unavailableCauses: readonly TargetTemporalCause[];
|
|
45
|
+
}
|
|
46
|
+
export interface TargetReleaseInput {
|
|
47
|
+
readonly state: "not_applicable" | "unavailable" | "available";
|
|
48
|
+
readonly bound: TargetTemporalExactValue | null;
|
|
49
|
+
readonly relationship: TargetTemporalRelationship | null;
|
|
50
|
+
readonly unavailableCauses: readonly TargetTemporalCause[];
|
|
51
|
+
}
|
|
52
|
+
export interface TargetDeadlineInput {
|
|
53
|
+
readonly deadline: TargetCalendarValue;
|
|
54
|
+
readonly completionState: "incomplete" | "complete_actual_time_unavailable";
|
|
55
|
+
readonly anchorRelationship: TargetTemporalRelationship | null;
|
|
56
|
+
}
|
|
57
|
+
export interface TargetMilestoneTemporalInput {
|
|
58
|
+
readonly milestoneId: string;
|
|
59
|
+
readonly deadline: TargetDeadlineInput;
|
|
60
|
+
}
|
|
61
|
+
export interface TargetTaskTemporalInput {
|
|
62
|
+
readonly taskId: string;
|
|
63
|
+
readonly status: "planned" | "active" | "blocked" | "suspended" | "done";
|
|
64
|
+
readonly declaredNotBefore: TargetCalendarValue | null;
|
|
65
|
+
readonly release: TargetReleaseInput;
|
|
66
|
+
readonly deadline: TargetDeadlineInput | null;
|
|
67
|
+
}
|
|
68
|
+
export interface TargetTemporalInputProjection {
|
|
69
|
+
readonly calendar: typeof CALENDAR_ARITHMETIC_IDENTITY;
|
|
70
|
+
readonly documentId: string;
|
|
71
|
+
readonly grammarVersion: 1 | 2 | 3 | 4 | 5;
|
|
72
|
+
readonly anchor: TargetCalendarValue | null;
|
|
73
|
+
readonly effectiveProjection: TargetEffectiveProjection;
|
|
74
|
+
readonly milestoneDeadlines: readonly TargetMilestoneTemporalInput[];
|
|
75
|
+
readonly tasks: readonly TargetTaskTemporalInput[];
|
|
76
|
+
}
|
|
77
|
+
export interface TargetTemporalInputResult {
|
|
78
|
+
readonly ok: boolean;
|
|
79
|
+
readonly documentId: string | null;
|
|
80
|
+
readonly grammarVersion: number | null;
|
|
81
|
+
readonly projection: TargetTemporalInputProjection | null;
|
|
82
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
83
|
+
readonly diagnosticsTruncated: boolean;
|
|
84
|
+
}
|
|
85
|
+
export declare function assertTemporalScheduleStatusProjection(document: DocumentNode<TargetDeclarationKind>): void;
|
|
86
|
+
export declare function projectTargetTemporalInputs(validated: TargetGrammar3ValidatedDocument | TargetGrammar4ValidatedDocument | TargetGrammar5ValidatedDocument): TargetTemporalInputProjection;
|
|
87
|
+
export declare function prepareTargetTemporalInputs(text: string, capability: TargetGrammar3Capability | TargetGrammar4Capability, options?: TargetValidationOptions): TargetTemporalInputResult;
|
|
88
|
+
//# sourceMappingURL=target-temporal-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target-temporal-input.d.ts","sourceRoot":"","sources":["../../src/analysis/target-temporal-input.ts"],"names":[],"mappings":"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"}
|