perttool 0.10.6 → 0.11.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 +39 -1
- package/README.md +274 -609
- package/dist/application/cli-facade.d.ts +4 -10
- package/dist/application/cli-facade.d.ts.map +1 -1
- package/dist/application/cli-facade.js +1 -1
- package/dist/application/cli-facade.js.map +1 -1
- package/dist/application/contract10-candidate.d.ts +33 -0
- package/dist/application/contract10-candidate.d.ts.map +1 -0
- package/dist/application/contract10-candidate.js +38 -0
- package/dist/application/contract10-candidate.js.map +1 -0
- package/dist/application/contract10-planning-history.d.ts +4 -0
- package/dist/application/contract10-planning-history.d.ts.map +1 -0
- package/dist/application/contract10-planning-history.js +28 -0
- package/dist/application/contract10-planning-history.js.map +1 -0
- package/dist/application/contract10-planning.d.ts +61 -0
- package/dist/application/contract10-planning.d.ts.map +1 -0
- package/dist/application/contract10-planning.js +165 -0
- package/dist/application/contract10-planning.js.map +1 -0
- package/dist/application/contract10-runtime.d.ts +185 -0
- package/dist/application/contract10-runtime.d.ts.map +1 -0
- package/dist/application/contract10-runtime.js +236 -0
- package/dist/application/contract10-runtime.js.map +1 -0
- package/dist/application/contract8-milestone-acceptance.d.ts +6 -22
- package/dist/application/contract8-milestone-acceptance.d.ts.map +1 -1
- package/dist/application/contract8-milestone-acceptance.js +21 -99
- package/dist/application/contract8-milestone-acceptance.js.map +1 -1
- package/dist/application/contract8-milestone-read.d.ts +25 -0
- package/dist/application/contract8-milestone-read.d.ts.map +1 -0
- package/dist/application/contract8-milestone-read.js +111 -0
- package/dist/application/contract8-milestone-read.js.map +1 -0
- package/dist/application/contract9-assurance-evaluate.d.ts +3 -0
- package/dist/application/contract9-assurance-evaluate.d.ts.map +1 -0
- package/dist/application/contract9-assurance-evaluate.js +75 -0
- package/dist/application/contract9-assurance-evaluate.js.map +1 -0
- package/dist/application/contract9-assurance.d.ts +1 -2
- package/dist/application/contract9-assurance.d.ts.map +1 -1
- package/dist/application/contract9-assurance.js +2 -56
- package/dist/application/contract9-assurance.js.map +1 -1
- package/dist/application/contract9-candidate.d.ts +8 -0
- package/dist/application/contract9-candidate.d.ts.map +1 -1
- package/dist/application/contract9-candidate.js +36 -11
- package/dist/application/contract9-candidate.js.map +1 -1
- package/dist/application/contract9-mixed-mutation.d.ts +3 -0
- package/dist/application/contract9-mixed-mutation.d.ts.map +1 -1
- package/dist/application/contract9-mixed-mutation.js +5 -4
- package/dist/application/contract9-mixed-mutation.js.map +1 -1
- package/dist/application/contract9-temporal.js +1 -1
- package/dist/application/contract9-temporal.js.map +1 -1
- package/dist/application/target-actuals-analysis.d.ts.map +1 -1
- package/dist/application/target-actuals-analysis.js +10 -6
- package/dist/application/target-actuals-analysis.js.map +1 -1
- package/dist/application/target-temporal-analysis.d.ts +1 -0
- package/dist/application/target-temporal-analysis.d.ts.map +1 -1
- package/dist/application/target-temporal-analysis.js +5 -1
- package/dist/application/target-temporal-analysis.js.map +1 -1
- package/dist/cli.js +761 -87
- package/dist/cli.js.map +1 -1
- package/dist/command/contract10-discovery.d.ts +17 -0
- package/dist/command/contract10-discovery.d.ts.map +1 -0
- package/dist/command/contract10-discovery.js +304 -0
- package/dist/command/contract10-discovery.js.map +1 -0
- package/dist/command/contract10-usage.d.ts +24 -0
- package/dist/command/contract10-usage.d.ts.map +1 -0
- package/dist/command/contract10-usage.js +49 -0
- package/dist/command/contract10-usage.js.map +1 -0
- package/dist/core/index.d.ts +11 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -1
- package/dist/core/index.js.map +1 -1
- package/dist/help/assurance-guide.js +1 -1
- package/dist/help/assurance-guide.js.map +1 -1
- package/dist/help/contract10-guide.d.ts +10 -0
- package/dist/help/contract10-guide.d.ts.map +1 -0
- package/dist/help/contract10-guide.js +244 -0
- package/dist/help/contract10-guide.js.map +1 -0
- package/dist/index.d.ts +18 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/milestone-acceptance/advance.d.ts +9 -0
- package/dist/milestone-acceptance/advance.d.ts.map +1 -1
- package/dist/milestone-acceptance/advance.js +29 -2
- package/dist/milestone-acceptance/advance.js.map +1 -1
- package/dist/milestone-acceptance/mutation.d.ts +2 -0
- package/dist/milestone-acceptance/mutation.d.ts.map +1 -1
- package/dist/milestone-acceptance/mutation.js +48 -12
- package/dist/milestone-acceptance/mutation.js.map +1 -1
- package/dist/model/source-result.d.ts +12 -0
- package/dist/model/source-result.d.ts.map +1 -0
- package/dist/model/source-result.js +16 -0
- package/dist/model/source-result.js.map +1 -0
- package/dist/mutation/advance-deletion.d.ts +1 -0
- package/dist/mutation/advance-deletion.d.ts.map +1 -1
- package/dist/mutation/advance-deletion.js +4 -1
- package/dist/mutation/advance-deletion.js.map +1 -1
- package/dist/mutation/validated-source.d.ts +30 -0
- package/dist/mutation/validated-source.d.ts.map +1 -0
- package/dist/mutation/validated-source.js +58 -0
- package/dist/mutation/validated-source.js.map +1 -0
- package/dist/node/planning-token-store.d.ts +3 -0
- package/dist/node/planning-token-store.d.ts.map +1 -0
- package/dist/node/planning-token-store.js +90 -0
- package/dist/node/planning-token-store.js.map +1 -0
- package/dist/parser/document-parser.d.ts +1 -0
- package/dist/parser/document-parser.d.ts.map +1 -1
- package/dist/parser/document-parser.js +1 -1
- package/dist/parser/document-parser.js.map +1 -1
- package/dist/perttool-vscode-private-0.0.0-d1578b9.vsix +0 -0
- package/dist/planning-pool/advance.d.ts +10 -0
- package/dist/planning-pool/advance.d.ts.map +1 -0
- package/dist/planning-pool/advance.js +158 -0
- package/dist/planning-pool/advance.js.map +1 -0
- package/dist/planning-pool/format.d.ts +12 -0
- package/dist/planning-pool/format.d.ts.map +1 -0
- package/dist/planning-pool/format.js +199 -0
- package/dist/planning-pool/format.js.map +1 -0
- package/dist/planning-pool/history-guard.d.ts +19 -0
- package/dist/planning-pool/history-guard.d.ts.map +1 -0
- package/dist/planning-pool/history-guard.js +123 -0
- package/dist/planning-pool/history-guard.js.map +1 -0
- package/dist/planning-pool/history-types.d.ts +174 -0
- package/dist/planning-pool/history-types.d.ts.map +1 -0
- package/dist/planning-pool/history-types.js +2 -0
- package/dist/planning-pool/history-types.js.map +1 -0
- package/dist/planning-pool/history.d.ts +11 -0
- package/dist/planning-pool/history.d.ts.map +1 -0
- package/dist/planning-pool/history.js +977 -0
- package/dist/planning-pool/history.js.map +1 -0
- package/dist/planning-pool/human.d.ts +9 -0
- package/dist/planning-pool/human.d.ts.map +1 -0
- package/dist/planning-pool/human.js +305 -0
- package/dist/planning-pool/human.js.map +1 -0
- package/dist/planning-pool/intent-types.d.ts +76 -0
- package/dist/planning-pool/intent-types.d.ts.map +1 -0
- package/dist/planning-pool/intent-types.js +2 -0
- package/dist/planning-pool/intent-types.js.map +1 -0
- package/dist/planning-pool/intent.d.ts +7 -0
- package/dist/planning-pool/intent.d.ts.map +1 -0
- package/dist/planning-pool/intent.js +590 -0
- package/dist/planning-pool/intent.js.map +1 -0
- package/dist/planning-pool/observation-types.d.ts +143 -0
- package/dist/planning-pool/observation-types.d.ts.map +1 -0
- package/dist/planning-pool/observation-types.js +2 -0
- package/dist/planning-pool/observation-types.js.map +1 -0
- package/dist/planning-pool/observation.d.ts +8 -0
- package/dist/planning-pool/observation.d.ts.map +1 -0
- package/dist/planning-pool/observation.js +582 -0
- package/dist/planning-pool/observation.js.map +1 -0
- package/dist/planning-pool/projection.d.ts +28 -0
- package/dist/planning-pool/projection.d.ts.map +1 -0
- package/dist/planning-pool/projection.js +148 -0
- package/dist/planning-pool/projection.js.map +1 -0
- package/dist/planning-pool/public-core.d.ts +32 -0
- package/dist/planning-pool/public-core.d.ts.map +1 -0
- package/dist/planning-pool/public-core.js +122 -0
- package/dist/planning-pool/public-core.js.map +1 -0
- package/dist/planning-pool/reshape-normalize.d.ts +15 -0
- package/dist/planning-pool/reshape-normalize.d.ts.map +1 -0
- package/dist/planning-pool/reshape-normalize.js +688 -0
- package/dist/planning-pool/reshape-normalize.js.map +1 -0
- package/dist/planning-pool/reshape-token.d.ts +20 -0
- package/dist/planning-pool/reshape-token.d.ts.map +1 -0
- package/dist/planning-pool/reshape-token.js +193 -0
- package/dist/planning-pool/reshape-token.js.map +1 -0
- package/dist/planning-pool/reshape-types.d.ts +183 -0
- package/dist/planning-pool/reshape-types.d.ts.map +1 -0
- package/dist/planning-pool/reshape-types.js +2 -0
- package/dist/planning-pool/reshape-types.js.map +1 -0
- package/dist/planning-pool/reshape.d.ts +13 -0
- package/dist/planning-pool/reshape.d.ts.map +1 -0
- package/dist/planning-pool/reshape.js +1434 -0
- package/dist/planning-pool/reshape.js.map +1 -0
- package/dist/planning-pool/source-lexical.d.ts +30 -0
- package/dist/planning-pool/source-lexical.d.ts.map +1 -0
- package/dist/planning-pool/source-lexical.js +158 -0
- package/dist/planning-pool/source-lexical.js.map +1 -0
- package/dist/planning-pool/source-types.d.ts +169 -0
- package/dist/planning-pool/source-types.d.ts.map +1 -0
- package/dist/planning-pool/source-types.js +2 -0
- package/dist/planning-pool/source-types.js.map +1 -0
- package/dist/planning-pool/source-values.d.ts +16 -0
- package/dist/planning-pool/source-values.d.ts.map +1 -0
- package/dist/planning-pool/source-values.js +120 -0
- package/dist/planning-pool/source-values.js.map +1 -0
- package/dist/planning-pool/source.d.ts +18 -0
- package/dist/planning-pool/source.d.ts.map +1 -0
- package/dist/planning-pool/source.js +811 -0
- package/dist/planning-pool/source.js.map +1 -0
- package/dist/planning-pool/window-types.d.ts +133 -0
- package/dist/planning-pool/window-types.d.ts.map +1 -0
- package/dist/planning-pool/window-types.js +2 -0
- package/dist/planning-pool/window-types.js.map +1 -0
- package/dist/planning-pool/window.d.ts +6 -0
- package/dist/planning-pool/window.d.ts.map +1 -0
- package/dist/planning-pool/window.js +625 -0
- package/dist/planning-pool/window.js.map +1 -0
- package/dist/schema/registry.d.ts +1 -1
- package/dist/schema/registry.d.ts.map +1 -1
- package/dist/schema/registry.js +17 -3
- package/dist/schema/registry.js.map +1 -1
- package/dist/temporal-schedule/format.d.ts.map +1 -1
- package/dist/temporal-schedule/format.js +4 -54
- package/dist/temporal-schedule/format.js.map +1 -1
- package/dist/temporal-schedule/source-lexical.d.ts +9 -0
- package/dist/temporal-schedule/source-lexical.d.ts.map +1 -1
- package/dist/temporal-schedule/source-lexical.js +21 -10
- package/dist/temporal-schedule/source-lexical.js.map +1 -1
- package/dist/temporal-schedule/source.d.ts.map +1 -1
- package/dist/temporal-schedule/source.js +3 -13
- package/dist/temporal-schedule/source.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/schemas/{Perttool.AdvanceResult.v3.schema.json → Perttool.AdvanceResult.v4.schema.json} +42 -4
- package/schemas/Perttool.AgentGuidanceResult.v1.schema.json +1 -1
- package/schemas/Perttool.AnalysisResult.v7.schema.json +1 -1
- package/schemas/Perttool.CheckResult.v6.schema.json +1 -1
- package/schemas/Perttool.CliError.v1.schema.json +1 -1
- package/schemas/Perttool.CommandHelpResult.v1.schema.json +2 -2
- package/schemas/Perttool.ExportResult.v1.schema.json +1 -1
- package/schemas/Perttool.FormatResult.v1.schema.json +1 -1
- package/schemas/Perttool.GuideResult.v1.schema.json +1 -1
- package/schemas/Perttool.HistoricalGraphResult.v1.schema.json +1 -1
- package/schemas/Perttool.ImportResult.v1.schema.json +1 -1
- package/schemas/Perttool.InitResult.v1.schema.json +1 -1
- package/schemas/Perttool.MilestoneAcceptanceMigrationResult.v1.schema.json +1 -1
- package/schemas/Perttool.MilestoneAcceptanceResult.v1.schema.json +1 -1
- package/schemas/Perttool.MutationResult.v6.schema.json +1 -1
- package/schemas/Perttool.NextResult.v8.schema.json +7 -4
- package/schemas/Perttool.PlanAssuranceResult.v2.schema.json +1 -1
- package/schemas/Perttool.PlanningMutationResult.v1.schema.json +567 -0
- package/schemas/Perttool.PlanningObservationRequest.v1.schema.json +6 -0
- package/schemas/Perttool.PlanningPoolResult.v1.schema.json +469 -0
- package/schemas/Perttool.PlanningReshapePreflightResult.v1.schema.json +906 -0
- package/schemas/Perttool.PlanningReshapeRequest.v1.schema.json +19 -0
- package/schemas/Perttool.ProjectHistoryResult.v1.schema.json +1 -1
- package/schemas/Perttool.ProjectResult.v5.schema.json +1 -1
- package/schemas/Perttool.SchemaResult.v1.schema.json +1 -1
- package/schemas/{Perttool.UnitMigrationResult.v4.schema.json → Perttool.UnitMigrationResult.v5.schema.json} +42 -17
- package/schemas/Perttool.VelocityObservationResult.v1.schema.json +1 -1
- package/schemas/Perttool.WindowMutationRequest.v1.schema.json +6 -0
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
import { computeEffectiveReached } from "../analysis/graph.js";
|
|
2
|
+
import { projectActualsSourceModel, workEventsForTask, } from "../actuals/source.js";
|
|
3
|
+
import { reduceTaskLifecycle, taskStatus, validateStoredLifecycleState, } from "../actuals/lifecycle.js";
|
|
4
|
+
import { evaluateMilestoneAcceptance, } from "../milestone-acceptance/evaluate.js";
|
|
5
|
+
import { MILESTONE_ACCEPTANCE_SOURCE_CAPABILITY, milestoneAcceptanceBaseText, parseMilestoneAcceptanceSource, } from "../milestone-acceptance/source.js";
|
|
6
|
+
import { parseDeclaredCalendarValue } from "../model/calendar.js";
|
|
7
|
+
import { sha256DigestUtf8 } from "../model/sha256.js";
|
|
8
|
+
import { fieldLine, scanTemporalDeclarationBlocks, temporalScheduleBaseText } from "../temporal-schedule/source-lexical.js";
|
|
9
|
+
import { TARGET_GRAMMAR_6_CAPABILITY } from "../parser/document-parser.js";
|
|
10
|
+
import { validateTargetGrammar6Document } from "../semantic/target-validator.js";
|
|
11
|
+
import { canonicalPlanningCalendar, comparePlanningCalendarValues } from "./source-values.js";
|
|
12
|
+
import { planningPoolBaseText, scanPlanningDeclarationBlocks, } from "./source-lexical.js";
|
|
13
|
+
import { parsePlanningPoolSource, PLANNING_POOL_SOURCE_CAPABILITY, } from "./source.js";
|
|
14
|
+
import { inspectPlanningWindowSelection, PLANNING_WINDOW_CORE_CAPABILITY, } from "./window.js";
|
|
15
|
+
export const PLANNING_OBSERVATION_CORE_CAPABILITY = Object.freeze({
|
|
16
|
+
id: "perttool.planning-observation-core",
|
|
17
|
+
version: 1,
|
|
18
|
+
});
|
|
19
|
+
export const PLANNING_OBSERVATION_CORE_LIMITS = Object.freeze({
|
|
20
|
+
requestUtf8Bytes: 8_388_608,
|
|
21
|
+
derivedEntityRecords: 100_000,
|
|
22
|
+
});
|
|
23
|
+
const requestSchema = "Perttool.PlanningObservationRequest.v1";
|
|
24
|
+
const digestPattern = /^sha256:[0-9a-f]{64}$/u;
|
|
25
|
+
const qualifiedPattern = /^[A-Za-z][A-Za-z0-9_-]*::[A-Za-z][A-Za-z0-9_-]*$/u;
|
|
26
|
+
function diagnostic(code, message, entityId) {
|
|
27
|
+
return Object.freeze({
|
|
28
|
+
code,
|
|
29
|
+
severity: code === "PTPOOL-114" ? "warning" : "error",
|
|
30
|
+
message,
|
|
31
|
+
...(entityId === undefined ? {} : { entityId }),
|
|
32
|
+
data: Object.freeze({}),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function requireCapability(capability) {
|
|
36
|
+
if (capability !== PLANNING_OBSERVATION_CORE_CAPABILITY) {
|
|
37
|
+
throw new TypeError("the private planning observation Core capability is required");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function closed(value, keys, label, diagnostics) {
|
|
41
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
42
|
+
diagnostics.push(diagnostic("PTPOOL-107", `${label} must be an object`));
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const parsed = value;
|
|
46
|
+
const unknown = Object.keys(parsed).filter((key) => !keys.has(key));
|
|
47
|
+
const missing = [...keys].filter((key) => !(key in parsed));
|
|
48
|
+
if (unknown.length > 0 || missing.length > 0) {
|
|
49
|
+
diagnostics.push(diagnostic("PTPOOL-107", `${label} has${missing.length === 0 ? "" : ` missing ${missing.join(", ")}`}${unknown.length === 0 ? "" : ` unknown ${unknown.join(", ")}`}`));
|
|
50
|
+
}
|
|
51
|
+
return parsed;
|
|
52
|
+
}
|
|
53
|
+
function qualifiedIds(value, label, diagnostics) {
|
|
54
|
+
if (!Array.isArray(value)) {
|
|
55
|
+
diagnostics.push(diagnostic("PTPOOL-107", `${label} must be an array`));
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const ids = [];
|
|
59
|
+
for (const item of value) {
|
|
60
|
+
if (typeof item !== "string" || !qualifiedPattern.test(item)) {
|
|
61
|
+
diagnostics.push(diagnostic("PTPOOL-102", `${label} must contain qualified identities`));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
ids.push(item);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (new Set(ids).size !== ids.length) {
|
|
68
|
+
diagnostics.push(diagnostic("PTPOOL-107", `${label} contains a duplicate`));
|
|
69
|
+
}
|
|
70
|
+
return Object.freeze(ids);
|
|
71
|
+
}
|
|
72
|
+
function optionalString(value, label, diagnostics) {
|
|
73
|
+
if (value === null)
|
|
74
|
+
return null;
|
|
75
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
76
|
+
diagnostics.push(diagnostic("PTPOOL-107", `${label} must be null or a non-empty string`));
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
function poolSelection(value, diagnostics) {
|
|
82
|
+
return closed(value, new Set(["kind"]), "Pool selection", diagnostics) === null
|
|
83
|
+
? null
|
|
84
|
+
: Object.freeze({ kind: "pool" });
|
|
85
|
+
}
|
|
86
|
+
function workSelection(value, diagnostics) {
|
|
87
|
+
const parsed = closed(value, new Set(["kind", "work_ids"]), "Work selection", diagnostics);
|
|
88
|
+
const ids = qualifiedIds(parsed?.["work_ids"], "Work selection", diagnostics);
|
|
89
|
+
return parsed === null || ids === null
|
|
90
|
+
? null
|
|
91
|
+
: Object.freeze({ kind: "work", work_ids: ids });
|
|
92
|
+
}
|
|
93
|
+
function persistedSelection(value, diagnostics) {
|
|
94
|
+
const parsed = closed(value, new Set(["kind", "window_id"]), "persisted Window selection", diagnostics);
|
|
95
|
+
const id = parsed?.["window_id"];
|
|
96
|
+
if (typeof id !== "string" || !qualifiedPattern.test(id)) {
|
|
97
|
+
diagnostics.push(diagnostic("PTPOOL-102", "Window selection requires a qualified identity"));
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
return Object.freeze({ kind: "persisted", window_id: id });
|
|
101
|
+
}
|
|
102
|
+
function adHocSelection(value, diagnostics) {
|
|
103
|
+
const parsed = closed(value, new Set(["kind", "title", "objective", "start", "end", "work_ids"]), "ad hoc Window selection", diagnostics);
|
|
104
|
+
if (parsed === null)
|
|
105
|
+
return null;
|
|
106
|
+
const title = optionalString(parsed["title"], "ad hoc title", diagnostics);
|
|
107
|
+
const objective = optionalString(parsed["objective"], "ad hoc objective", diagnostics);
|
|
108
|
+
const start = parsed["start"] === null ? null : canonicalPlanningCalendar(String(parsed["start"]));
|
|
109
|
+
const end = parsed["end"] === null ? null : canonicalPlanningCalendar(String(parsed["end"]));
|
|
110
|
+
const works = qualifiedIds(parsed["work_ids"], "ad hoc Work", diagnostics);
|
|
111
|
+
if (parsed["start"] !== null && start === null)
|
|
112
|
+
diagnostics.push(diagnostic("PTPOOL-107", "ad hoc start is invalid"));
|
|
113
|
+
if (parsed["end"] !== null && end === null)
|
|
114
|
+
diagnostics.push(diagnostic("PTPOOL-107", "ad hoc end is invalid"));
|
|
115
|
+
if (title === undefined || objective === undefined || works === null || diagnostics.length > 0)
|
|
116
|
+
return null;
|
|
117
|
+
return Object.freeze({ kind: "ad_hoc", title, objective, start, end, work_ids: works });
|
|
118
|
+
}
|
|
119
|
+
function normalizeSelection(value, diagnostics) {
|
|
120
|
+
const kind = value !== null && typeof value === "object" && !Array.isArray(value)
|
|
121
|
+
? value["kind"]
|
|
122
|
+
: undefined;
|
|
123
|
+
switch (kind) {
|
|
124
|
+
case "pool": return poolSelection(value, diagnostics);
|
|
125
|
+
case "work": return workSelection(value, diagnostics);
|
|
126
|
+
case "persisted": return persistedSelection(value, diagnostics);
|
|
127
|
+
case "ad_hoc": return adHocSelection(value, diagnostics);
|
|
128
|
+
default:
|
|
129
|
+
diagnostics.push(diagnostic("PTPOOL-107", "Observation selection kind must be pool, work, persisted, or ad_hoc"));
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function normalizeDispositions(value, diagnostics) {
|
|
134
|
+
if (!Array.isArray(value)) {
|
|
135
|
+
diagnostics.push(diagnostic("PTPOOL-107", "close_dispositions must be an array"));
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
const result = [];
|
|
139
|
+
for (const item of value) {
|
|
140
|
+
const parsed = closed(item, new Set(["work_id", "disposition"]), "close disposition", diagnostics);
|
|
141
|
+
const workId = parsed?.["work_id"];
|
|
142
|
+
const disposition = parsed?.["disposition"];
|
|
143
|
+
if (typeof workId !== "string" || !qualifiedPattern.test(workId)) {
|
|
144
|
+
diagnostics.push(diagnostic("PTPOOL-102", "close disposition Work must be qualified"));
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (disposition !== "carried_over" && disposition !== "retained_backlog" && disposition !== "archive_requested") {
|
|
148
|
+
diagnostics.push(diagnostic("PTPOOL-107", "close disposition is unsupported", workId));
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
result.push(Object.freeze({ work_id: workId, disposition }));
|
|
152
|
+
}
|
|
153
|
+
if (new Set(result.map(({ work_id }) => work_id)).size !== result.length) {
|
|
154
|
+
diagnostics.push(diagnostic("PTPOOL-107", "close disposition Work is duplicated"));
|
|
155
|
+
}
|
|
156
|
+
return Object.freeze(result);
|
|
157
|
+
}
|
|
158
|
+
function normalizeRequest(input, diagnostics) {
|
|
159
|
+
try {
|
|
160
|
+
if (new TextEncoder().encode(JSON.stringify(input)).byteLength > PLANNING_OBSERVATION_CORE_LIMITS.requestUtf8Bytes) {
|
|
161
|
+
diagnostics.push(diagnostic("PTPOOL-115", "Planning observation request exceeds 8388608 UTF-8 bytes"));
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
diagnostics.push(diagnostic("PTPOOL-107", "Planning observation request is not JSON-compatible"));
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const parsed = closed(input, new Set(["request_schema_version", "source_digest", "selection", "observation_at", "close_dispositions"]), "Planning observation request", diagnostics);
|
|
170
|
+
if (parsed === null)
|
|
171
|
+
return null;
|
|
172
|
+
if (parsed["request_schema_version"] !== requestSchema) {
|
|
173
|
+
diagnostics.push(diagnostic("PTPOOL-107", "Planning observation request schema identity is unsupported"));
|
|
174
|
+
}
|
|
175
|
+
const sourceDigest = parsed["source_digest"];
|
|
176
|
+
if (typeof sourceDigest !== "string" || !digestPattern.test(sourceDigest)) {
|
|
177
|
+
diagnostics.push(diagnostic("PTPOOL-111", "source_digest must be a lowercase SHA-256 identity"));
|
|
178
|
+
}
|
|
179
|
+
const selection = normalizeSelection(parsed["selection"], diagnostics);
|
|
180
|
+
const rawObservation = parsed["observation_at"];
|
|
181
|
+
const observationAt = rawObservation === null ? null : canonicalPlanningCalendar(String(rawObservation));
|
|
182
|
+
if (rawObservation !== null && observationAt === null) {
|
|
183
|
+
diagnostics.push(diagnostic("PTPOOL-107", "observation_at must be null or an ISO date or fixed-offset date-time"));
|
|
184
|
+
}
|
|
185
|
+
const dispositions = normalizeDispositions(parsed["close_dispositions"], diagnostics);
|
|
186
|
+
if (typeof sourceDigest !== "string" || selection === null || dispositions === null || diagnostics.length > 0)
|
|
187
|
+
return null;
|
|
188
|
+
return Object.freeze({
|
|
189
|
+
request_schema_version: requestSchema,
|
|
190
|
+
source_digest: sourceDigest,
|
|
191
|
+
selection,
|
|
192
|
+
observation_at: observationAt,
|
|
193
|
+
close_dispositions: dispositions,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
function localId(qualifiedId, documentId) {
|
|
197
|
+
const prefix = `${documentId}::`;
|
|
198
|
+
return qualifiedId.startsWith(prefix) ? qualifiedId.slice(prefix.length) : null;
|
|
199
|
+
}
|
|
200
|
+
function validateExecutionContext(context, sourceDigest, model, diagnostics) {
|
|
201
|
+
if (context.source_digest !== sourceDigest) {
|
|
202
|
+
diagnostics.push(diagnostic("PTPOOL-111", "global execution context does not match current source"));
|
|
203
|
+
}
|
|
204
|
+
if (!["complete", "incomplete", "unavailable"].includes(context.evidence_state)) {
|
|
205
|
+
diagnostics.push(diagnostic("PTPOOL-107", "global execution evidence state is unsupported"));
|
|
206
|
+
}
|
|
207
|
+
for (const ids of [context.recommended_task_ids, context.startable_task_ids]) {
|
|
208
|
+
if (new Set(ids).size !== ids.length ||
|
|
209
|
+
ids.some((id) => !qualifiedPattern.test(id) || localId(id, model.documentId) === null)) {
|
|
210
|
+
diagnostics.push(diagnostic("PTPOOL-107", "global execution context requires unique qualified Task identities"));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (context.startable_task_ids.some((id) => !context.recommended_task_ids.includes(id))) {
|
|
214
|
+
diagnostics.push(diagnostic("PTPOOL-107", "startable Task facts must remain a subset of recommendations"));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function currentStrictFacts(text) {
|
|
218
|
+
const grammar8 = planningPoolBaseText(text, scanPlanningDeclarationBlocks(text));
|
|
219
|
+
const grammar7 = temporalScheduleBaseText(grammar8, scanTemporalDeclarationBlocks(grammar8));
|
|
220
|
+
const acceptanceSource = parseMilestoneAcceptanceSource(grammar7, MILESTONE_ACCEPTANCE_SOURCE_CAPABILITY);
|
|
221
|
+
const grammar6 = milestoneAcceptanceBaseText(grammar7);
|
|
222
|
+
const checked = validateTargetGrammar6Document(grammar6, TARGET_GRAMMAR_6_CAPABILITY);
|
|
223
|
+
if (!acceptanceSource.ok || !checked.ok || checked.validatedDocument === null)
|
|
224
|
+
return null;
|
|
225
|
+
const validated = checked.validatedDocument;
|
|
226
|
+
if (validateStoredLifecycleState(validated).length > 0)
|
|
227
|
+
return null;
|
|
228
|
+
const milestoneIds = validated.document.declarations
|
|
229
|
+
.filter(({ kind }) => kind === "milestone")
|
|
230
|
+
.map(({ id }) => id);
|
|
231
|
+
const acceptance = evaluateMilestoneAcceptance({
|
|
232
|
+
source: acceptanceSource,
|
|
233
|
+
milestoneIds,
|
|
234
|
+
closureReachedMilestoneIds: computeEffectiveReached(validated.document),
|
|
235
|
+
});
|
|
236
|
+
return acceptance.ok ? Object.freeze({ validated, acceptance }) : null;
|
|
237
|
+
}
|
|
238
|
+
function validateExecutionTaskIdentities(context, strict, documentId, diagnostics) {
|
|
239
|
+
const known = new Set(strict.validated.document.declarations
|
|
240
|
+
.filter(({ kind }) => kind === "task")
|
|
241
|
+
.map(({ id }) => `${documentId}::${id}`));
|
|
242
|
+
const unknown = [...context.recommended_task_ids, ...context.startable_task_ids]
|
|
243
|
+
.find((id) => !known.has(id));
|
|
244
|
+
if (unknown !== undefined)
|
|
245
|
+
diagnostics.push(diagnostic("PTPOOL-107", "global execution context names an unknown Task", unknown));
|
|
246
|
+
}
|
|
247
|
+
function allWorkIds(model) {
|
|
248
|
+
return Object.freeze(model.workOrder.map(({ qualifiedId }) => qualifiedId));
|
|
249
|
+
}
|
|
250
|
+
function selectedObservation(text, request, model, diagnostics) {
|
|
251
|
+
if (request.selection.kind === "pool") {
|
|
252
|
+
return Object.freeze({ workIds: allWorkIds(model), window: null, temporalOverlaps: Object.freeze([]) });
|
|
253
|
+
}
|
|
254
|
+
if (request.selection.kind === "work") {
|
|
255
|
+
const known = new Set(model.works.map(({ qualifiedId }) => qualifiedId));
|
|
256
|
+
const foreign = request.selection.work_ids.find((id) => localId(id, model.documentId) === null || !known.has(id));
|
|
257
|
+
if (foreign !== undefined) {
|
|
258
|
+
diagnostics.push(diagnostic("PTPOOL-107", `Work ${foreign} does not exist`, foreign));
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
const selected = new Set(request.selection.work_ids);
|
|
262
|
+
return Object.freeze({
|
|
263
|
+
workIds: Object.freeze(allWorkIds(model).filter((id) => selected.has(id))),
|
|
264
|
+
window: null,
|
|
265
|
+
temporalOverlaps: Object.freeze([]),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
const inspected = inspectPlanningWindowSelection(text, request.selection, PLANNING_WINDOW_CORE_CAPABILITY);
|
|
269
|
+
if (!inspected.ok || inspected.selection === null) {
|
|
270
|
+
diagnostics.push(...inspected.diagnostics);
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
return Object.freeze({
|
|
274
|
+
workIds: inspected.orderedWorkIds,
|
|
275
|
+
window: inspected.selection,
|
|
276
|
+
temporalOverlaps: inspected.temporalOverlaps,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
function projectAsOf(text) {
|
|
280
|
+
const project = scanTemporalDeclarationBlocks(text).find(({ kind }) => kind === "project");
|
|
281
|
+
const raw = project?.lines.map(fieldLine).find((field) => field?.name === "as_of")?.rawValue;
|
|
282
|
+
return raw === undefined ? null : canonicalPlanningCalendar(raw);
|
|
283
|
+
}
|
|
284
|
+
function temporalObservationBasis(requestValue, fallbackValue) {
|
|
285
|
+
return requestValue !== null
|
|
286
|
+
? Object.freeze({ value: requestValue, source: "request" })
|
|
287
|
+
: fallbackValue !== null
|
|
288
|
+
? Object.freeze({ value: fallbackValue, source: "project_as_of" })
|
|
289
|
+
: Object.freeze({ value: null, source: null });
|
|
290
|
+
}
|
|
291
|
+
function unavailableTemporalPosition(basis, cause) {
|
|
292
|
+
return Object.freeze({
|
|
293
|
+
state: "unavailable",
|
|
294
|
+
observationValue: basis.value,
|
|
295
|
+
source: basis.source,
|
|
296
|
+
cause,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
function boundedTemporalPosition(window, basis) {
|
|
300
|
+
if (basis.value === null)
|
|
301
|
+
return unavailableTemporalPosition(basis, "missing_observation_value");
|
|
302
|
+
const value = parsePlanningCalendar(basis.value);
|
|
303
|
+
const representativeBound = parsePlanningCalendar(window.start ?? window.end);
|
|
304
|
+
if (value === null || representativeBound === null ||
|
|
305
|
+
comparePlanningCalendarValues(value, representativeBound) === null) {
|
|
306
|
+
return unavailableTemporalPosition(basis, "incomparable_temporal_kinds");
|
|
307
|
+
}
|
|
308
|
+
const start = window.start === null ? null : parsePlanningCalendar(window.start);
|
|
309
|
+
const end = window.end === null ? null : parsePlanningCalendar(window.end);
|
|
310
|
+
const state = start !== null && comparePlanningCalendarValues(value, start) < 0
|
|
311
|
+
? "before"
|
|
312
|
+
: end !== null && comparePlanningCalendarValues(value, end) >= 0
|
|
313
|
+
? "after"
|
|
314
|
+
: "inside";
|
|
315
|
+
return Object.freeze({
|
|
316
|
+
state,
|
|
317
|
+
observationValue: basis.value,
|
|
318
|
+
source: basis.source,
|
|
319
|
+
cause: null,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
function temporalPosition(window, requestValue, fallbackValue) {
|
|
323
|
+
const basis = temporalObservationBasis(requestValue, fallbackValue);
|
|
324
|
+
if (window.start === null && window.end === null) {
|
|
325
|
+
return Object.freeze({
|
|
326
|
+
state: "unbounded",
|
|
327
|
+
observationValue: basis.value,
|
|
328
|
+
source: basis.source,
|
|
329
|
+
cause: null,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return boundedTemporalPosition(window, basis);
|
|
333
|
+
}
|
|
334
|
+
function parsePlanningCalendar(value) {
|
|
335
|
+
return parseDeclaredCalendarValue(value) ?? null;
|
|
336
|
+
}
|
|
337
|
+
function workArchiveable(work, model) {
|
|
338
|
+
const incoming = model.works.some((candidate) => candidate.qualifiedId !== work.qualifiedId &&
|
|
339
|
+
candidate.dependsOn.some(({ qualifiedId }) => qualifiedId === work.qualifiedId));
|
|
340
|
+
const membership = model.windows.some((window) => window.works.some(({ qualifiedId }) => qualifiedId === work.qualifiedId));
|
|
341
|
+
const meaning = (work.description?.value ?? "").length > 0 || work.events.length > 0 || work.activities.length > 0 ||
|
|
342
|
+
work.milestoneLinks.length > 0 || work.taskLinks.length > 0;
|
|
343
|
+
return !meaning && work.dependsOn.length === 0 && !incoming && !membership;
|
|
344
|
+
}
|
|
345
|
+
function taskFacts(work, model, strict) {
|
|
346
|
+
const actuals = projectActualsSourceModel(strict.validated);
|
|
347
|
+
const consumers = new Map();
|
|
348
|
+
for (const candidate of model.works) {
|
|
349
|
+
for (const link of candidate.taskLinks)
|
|
350
|
+
consumers.set(link.qualifiedId, (consumers.get(link.qualifiedId) ?? 0) + 1);
|
|
351
|
+
}
|
|
352
|
+
return Object.freeze(work.taskLinks.map((link) => {
|
|
353
|
+
const local = localId(link.qualifiedId, model.documentId);
|
|
354
|
+
const declaration = strict.validated.document.declarations.find(({ kind, id }) => kind === "task" && id === local);
|
|
355
|
+
const events = workEventsForTask(actuals, local);
|
|
356
|
+
const lifecycle = reduceTaskLifecycle(events);
|
|
357
|
+
const status = taskStatus(declaration);
|
|
358
|
+
return Object.freeze({
|
|
359
|
+
taskId: link.qualifiedId,
|
|
360
|
+
status,
|
|
361
|
+
actualsCoverage: lifecycle.coverage,
|
|
362
|
+
workEventIds: Object.freeze(events.map(({ id }) => `${model.documentId}::${id}`)),
|
|
363
|
+
complete: status === "done",
|
|
364
|
+
attribution: (consumers.get(link.qualifiedId) ?? 0) > 1 ? "non_exclusive" : "exclusive",
|
|
365
|
+
});
|
|
366
|
+
}));
|
|
367
|
+
}
|
|
368
|
+
function executionFacts(work, tasks) {
|
|
369
|
+
const obligations = Object.freeze([...work.activities.map(({ qualifiedId }) => qualifiedId), ...work.taskLinks.map(({ qualifiedId }) => qualifiedId)]);
|
|
370
|
+
const unprojected = Object.freeze(work.activities.map(({ qualifiedId }) => qualifiedId));
|
|
371
|
+
const state = obligations.length === 0
|
|
372
|
+
? "uncovered"
|
|
373
|
+
: unprojected.length === 0 && tasks.every(({ complete }) => complete)
|
|
374
|
+
? "complete"
|
|
375
|
+
: "partial";
|
|
376
|
+
return Object.freeze({ state, activityObligationIds: obligations, unprojectedActivityIds: unprojected, tasks });
|
|
377
|
+
}
|
|
378
|
+
function milestoneFacts(work, model, strict) {
|
|
379
|
+
const consumers = new Map();
|
|
380
|
+
for (const candidate of model.works) {
|
|
381
|
+
for (const link of candidate.milestoneLinks)
|
|
382
|
+
consumers.set(link.qualifiedId, (consumers.get(link.qualifiedId) ?? 0) + 1);
|
|
383
|
+
}
|
|
384
|
+
return Object.freeze(work.milestoneLinks.map((link) => {
|
|
385
|
+
const local = localId(link.qualifiedId, model.documentId);
|
|
386
|
+
const evaluation = strict.acceptance.milestones.find(({ milestoneId }) => milestoneId === local);
|
|
387
|
+
return Object.freeze({
|
|
388
|
+
milestoneId: link.qualifiedId,
|
|
389
|
+
closure: evaluation.closure,
|
|
390
|
+
acceptance: evaluation.acceptance,
|
|
391
|
+
criteria: evaluation.criteria,
|
|
392
|
+
evidenceComplete: evaluation.acceptance !== "unavailable",
|
|
393
|
+
attribution: (consumers.get(link.qualifiedId) ?? 0) > 1 ? "non_exclusive" : "exclusive",
|
|
394
|
+
});
|
|
395
|
+
}));
|
|
396
|
+
}
|
|
397
|
+
function cycleIds(work, model) {
|
|
398
|
+
const cycle = model.dependencyCycles.find((ids) => ids.includes(work.id));
|
|
399
|
+
return Object.freeze((cycle ?? []).map((id) => `${model.documentId}::${id}`));
|
|
400
|
+
}
|
|
401
|
+
function workFacts(work, selected, model, strict, dispositions) {
|
|
402
|
+
const tasks = taskFacts(work, model, strict);
|
|
403
|
+
const milestones = milestoneFacts(work, model, strict);
|
|
404
|
+
const dependentIds = model.works.filter((candidate) => candidate.dependsOn.some(({ qualifiedId }) => qualifiedId === work.qualifiedId))
|
|
405
|
+
.map(({ qualifiedId }) => qualifiedId);
|
|
406
|
+
const windowIds = model.windows.filter((window) => window.works.some(({ qualifiedId }) => qualifiedId === work.qualifiedId))
|
|
407
|
+
.map(({ qualifiedId }) => qualifiedId);
|
|
408
|
+
const traceUseful = work.taskLinks.length > 0 || work.milestoneLinks.length > 0 || work.dependsOn.length > 0 || dependentIds.length > 0 || windowIds.length > 0;
|
|
409
|
+
return Object.freeze({
|
|
410
|
+
workId: work.qualifiedId,
|
|
411
|
+
title: work.title,
|
|
412
|
+
refinement: Object.freeze({
|
|
413
|
+
residualDescriptionPresent: (work.description?.value ?? "").length > 0,
|
|
414
|
+
eventIds: Object.freeze(work.events.map(({ qualifiedId }) => qualifiedId)),
|
|
415
|
+
activityIds: Object.freeze(work.activities.map(({ qualifiedId }) => qualifiedId)),
|
|
416
|
+
milestoneLinkIds: Object.freeze(work.milestoneLinks.map(({ qualifiedId }) => qualifiedId)),
|
|
417
|
+
taskLinkIds: Object.freeze(work.taskLinks.map(({ qualifiedId }) => qualifiedId)),
|
|
418
|
+
uncoveredDependencyIds: Object.freeze(work.dependsOn.map(({ qualifiedId }) => qualifiedId).filter((id) => !selected.has(id))),
|
|
419
|
+
}),
|
|
420
|
+
execution: executionFacts(work, tasks),
|
|
421
|
+
outcome: Object.freeze({ state: "complete", milestones }),
|
|
422
|
+
organization: Object.freeze({
|
|
423
|
+
globalRank: model.workOrder.findIndex(({ qualifiedId }) => qualifiedId === work.qualifiedId),
|
|
424
|
+
dependencyIds: Object.freeze(work.dependsOn.map(({ qualifiedId }) => qualifiedId)),
|
|
425
|
+
dependentIds: Object.freeze(dependentIds),
|
|
426
|
+
dependencyCycleIds: cycleIds(work, model),
|
|
427
|
+
windowIds: Object.freeze(windowIds),
|
|
428
|
+
traceUseful,
|
|
429
|
+
archiveable: workArchiveable(work, model),
|
|
430
|
+
}),
|
|
431
|
+
closeDisposition: dispositions.get(work.qualifiedId) ?? "not_applicable",
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
function membershipOccurrences(model, selected) {
|
|
435
|
+
return Object.freeze(model.windows.flatMap((window) => window.works.map((work) => Object.freeze({
|
|
436
|
+
windowId: window.qualifiedId,
|
|
437
|
+
workId: work.qualifiedId,
|
|
438
|
+
selected: selected.has(work.qualifiedId),
|
|
439
|
+
}))));
|
|
440
|
+
}
|
|
441
|
+
function unique(values) {
|
|
442
|
+
return Object.freeze([...new Set(values)].sort());
|
|
443
|
+
}
|
|
444
|
+
function aggregates(works, occurrences) {
|
|
445
|
+
const tasks = works.flatMap(({ execution }) => execution.tasks);
|
|
446
|
+
const milestones = works.flatMap(({ outcome }) => outcome.milestones);
|
|
447
|
+
return Object.freeze({
|
|
448
|
+
uniqueWorkIds: unique(works.map(({ workId }) => workId)),
|
|
449
|
+
uniqueTaskIds: unique(tasks.map(({ taskId }) => taskId)),
|
|
450
|
+
uniqueMilestoneIds: unique(milestones.map(({ milestoneId }) => milestoneId)),
|
|
451
|
+
uniqueWorkEventIds: unique(tasks.flatMap(({ workEventIds }) => workEventIds)),
|
|
452
|
+
completedTaskIds: unique(tasks.filter(({ complete }) => complete).map(({ taskId }) => taskId)),
|
|
453
|
+
acceptedMilestoneIds: unique(milestones.filter(({ acceptance }) => acceptance === "accepted").map(({ milestoneId }) => milestoneId)),
|
|
454
|
+
membershipOccurrenceCount: occurrences.filter(({ selected }) => selected).length,
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
function derivedRecordCount(works, occurrences) {
|
|
458
|
+
return works.length + occurrences.length + works.reduce((sum, work) => sum + work.execution.tasks.length + work.outcome.milestones.length +
|
|
459
|
+
work.execution.tasks.reduce((events, task) => events + task.workEventIds.length, 0), 0);
|
|
460
|
+
}
|
|
461
|
+
function selectedExecution(works) {
|
|
462
|
+
const states = works.map(({ execution }) => execution.state);
|
|
463
|
+
if (states.length === 0 || states.every((state) => state === "uncovered"))
|
|
464
|
+
return "uncovered";
|
|
465
|
+
if (states.some((state) => state === "unavailable"))
|
|
466
|
+
return "unavailable";
|
|
467
|
+
if (states.some((state) => state === "unknown"))
|
|
468
|
+
return "unknown";
|
|
469
|
+
return states.every((state) => state === "complete") ? "complete" : "partial";
|
|
470
|
+
}
|
|
471
|
+
function emptyAggregates() {
|
|
472
|
+
return Object.freeze({
|
|
473
|
+
uniqueWorkIds: Object.freeze([]), uniqueTaskIds: Object.freeze([]), uniqueMilestoneIds: Object.freeze([]),
|
|
474
|
+
uniqueWorkEventIds: Object.freeze([]), completedTaskIds: Object.freeze([]), acceptedMilestoneIds: Object.freeze([]),
|
|
475
|
+
membershipOccurrenceCount: 0,
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
function globalExecution(context) {
|
|
479
|
+
return Object.freeze({
|
|
480
|
+
evidenceState: context.evidence_state,
|
|
481
|
+
recommendedTaskIds: Object.freeze([...context.recommended_task_ids]),
|
|
482
|
+
startableTaskIds: Object.freeze([...context.startable_task_ids]),
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
function failed(documentId, sourceDigest, request, context, diagnostics) {
|
|
486
|
+
return Object.freeze({
|
|
487
|
+
schemaVersion: "Perttool.PlanningPoolResult.v1",
|
|
488
|
+
observationCapability: "perttool.planning-observation-core@1",
|
|
489
|
+
operation: "observe",
|
|
490
|
+
ok: false,
|
|
491
|
+
documentId,
|
|
492
|
+
sourceDigest,
|
|
493
|
+
normalizedRequest: request,
|
|
494
|
+
evidence: Object.freeze({ mode: "current", state: "unavailable", sourceDigest, historyRequested: false }),
|
|
495
|
+
selectedWorkOrder: Object.freeze([]),
|
|
496
|
+
works: Object.freeze([]),
|
|
497
|
+
window: null,
|
|
498
|
+
membershipOccurrences: Object.freeze([]),
|
|
499
|
+
aggregates: emptyAggregates(),
|
|
500
|
+
globalExecution: globalExecution(context),
|
|
501
|
+
diagnostics: Object.freeze(diagnostics),
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
function hasErrors(diagnostics) {
|
|
505
|
+
return diagnostics.some(({ severity }) => severity === "error");
|
|
506
|
+
}
|
|
507
|
+
function prepareObservation(text, input, context, sourceDigest, diagnostics) {
|
|
508
|
+
const source = parsePlanningPoolSource(text, PLANNING_POOL_SOURCE_CAPABILITY);
|
|
509
|
+
const request = normalizeRequest(input, diagnostics);
|
|
510
|
+
if (!source.ok || source.model === null) {
|
|
511
|
+
diagnostics.push(...source.diagnostics, diagnostic("PTPOOL-116", "Planning observation requires a valid Grammar 9 source"));
|
|
512
|
+
}
|
|
513
|
+
if (request !== null && request.source_digest !== sourceDigest) {
|
|
514
|
+
diagnostics.push(diagnostic("PTPOOL-111", "Planning observation source digest does not match current source"));
|
|
515
|
+
}
|
|
516
|
+
if (source.model !== null)
|
|
517
|
+
validateExecutionContext(context, sourceDigest, source.model, diagnostics);
|
|
518
|
+
const strict = source.model === null ? null : currentStrictFacts(text);
|
|
519
|
+
if (strict === null)
|
|
520
|
+
diagnostics.push(diagnostic("PTPOOL-114", "current strict execution or outcome evidence is unavailable"));
|
|
521
|
+
if (source.model !== null && strict !== null) {
|
|
522
|
+
validateExecutionTaskIdentities(context, strict, source.model.documentId, diagnostics);
|
|
523
|
+
}
|
|
524
|
+
const selected = request !== null && source.model !== null && strict !== null && !hasErrors(diagnostics)
|
|
525
|
+
? selectedObservation(text, request, source.model, diagnostics)
|
|
526
|
+
: null;
|
|
527
|
+
return Object.freeze({ source, request, strict, selected });
|
|
528
|
+
}
|
|
529
|
+
function invalidDisposition(request, selected) {
|
|
530
|
+
return request.close_dispositions.find(({ work_id }) => !selected.has(work_id));
|
|
531
|
+
}
|
|
532
|
+
export function observePlanningPool(text, input, context, capability) {
|
|
533
|
+
requireCapability(capability);
|
|
534
|
+
const sourceDigest = sha256DigestUtf8(text);
|
|
535
|
+
const diagnostics = [];
|
|
536
|
+
const prepared = prepareObservation(text, input, context, sourceDigest, diagnostics);
|
|
537
|
+
const { source, request, strict, selected } = prepared;
|
|
538
|
+
if (request === null || source.model === null || strict === null || selected === null || hasErrors(diagnostics)) {
|
|
539
|
+
return failed(source.documentId, sourceDigest, request, context, diagnostics);
|
|
540
|
+
}
|
|
541
|
+
const selectedSet = new Set(selected.workIds);
|
|
542
|
+
const dispositions = new Map(request.close_dispositions.map(({ work_id, disposition }) => [work_id, disposition]));
|
|
543
|
+
const invalid = invalidDisposition(request, selectedSet);
|
|
544
|
+
if (invalid !== undefined) {
|
|
545
|
+
diagnostics.push(diagnostic("PTPOOL-107", "close disposition must name selected Work", invalid.work_id));
|
|
546
|
+
return failed(source.documentId, sourceDigest, request, context, diagnostics);
|
|
547
|
+
}
|
|
548
|
+
const works = Object.freeze(selected.workIds.map((id) => {
|
|
549
|
+
const work = source.model.works.find(({ qualifiedId }) => qualifiedId === id);
|
|
550
|
+
return workFacts(work, selectedSet, source.model, strict, dispositions);
|
|
551
|
+
}));
|
|
552
|
+
const occurrences = membershipOccurrences(source.model, selectedSet);
|
|
553
|
+
if (derivedRecordCount(works, occurrences) > PLANNING_OBSERVATION_CORE_LIMITS.derivedEntityRecords) {
|
|
554
|
+
diagnostics.push(diagnostic("PTPOOL-115", "Planning observation derived entity records exceed 100000"));
|
|
555
|
+
return failed(source.documentId, sourceDigest, request, context, diagnostics);
|
|
556
|
+
}
|
|
557
|
+
const window = selected.window === null ? null : Object.freeze({
|
|
558
|
+
window: selected.window,
|
|
559
|
+
objective: selected.window.objective,
|
|
560
|
+
temporalPosition: temporalPosition(selected.window, request.observation_at, projectAsOf(text)),
|
|
561
|
+
temporalOverlaps: selected.temporalOverlaps,
|
|
562
|
+
selectedExecution: selectedExecution(works),
|
|
563
|
+
});
|
|
564
|
+
return Object.freeze({
|
|
565
|
+
schemaVersion: "Perttool.PlanningPoolResult.v1",
|
|
566
|
+
observationCapability: "perttool.planning-observation-core@1",
|
|
567
|
+
operation: "observe",
|
|
568
|
+
ok: true,
|
|
569
|
+
documentId: source.model.documentId,
|
|
570
|
+
sourceDigest,
|
|
571
|
+
normalizedRequest: request,
|
|
572
|
+
evidence: Object.freeze({ mode: "current", state: context.evidence_state, sourceDigest, historyRequested: false }),
|
|
573
|
+
selectedWorkOrder: selected.workIds,
|
|
574
|
+
works,
|
|
575
|
+
window,
|
|
576
|
+
membershipOccurrences: occurrences,
|
|
577
|
+
aggregates: aggregates(works, occurrences),
|
|
578
|
+
globalExecution: globalExecution(context),
|
|
579
|
+
diagnostics: Object.freeze(diagnostics),
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
//# sourceMappingURL=observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation.js","sourceRoot":"","sources":["../../src/planning-pool/observation.ts"],"names":[],"mappings":"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"}
|