@outbuild-company/schedule-core 1.34.0-experiment.2 → 1.34.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/dist/index.d.ts CHANGED
@@ -17,6 +17,37 @@ declare const LINK_TYPE: {
17
17
  /** Canonical stored dependency relationship. */
18
18
  type LinkType = (typeof LINK_TYPE)[keyof typeof LINK_TYPE];
19
19
 
20
+ type ActivityId$1 = string;
21
+ type LinkId$1 = string;
22
+ interface LinkSnapshot {
23
+ id: LinkId$1;
24
+ source: ActivityId$1;
25
+ target: ActivityId$1;
26
+ type: LinkType;
27
+ lag: number;
28
+ freeSlackHours: number | null;
29
+ isCritical: boolean;
30
+ _sourceLag?: number;
31
+ _targetLag?: number;
32
+ _trueLag?: number;
33
+ _summarySourceId?: ActivityId$1;
34
+ _summaryTargetId?: ActivityId$1;
35
+ _lagActivityId?: ActivityId$1;
36
+ ganttId?: number;
37
+ sectorId?: number;
38
+ proplannerId?: number;
39
+ }
40
+ interface ScheduleFlags {
41
+ isPasting: boolean;
42
+ isBulkOperation: boolean;
43
+ dragWithMultiple: boolean;
44
+ draggingSingleMilestone: boolean;
45
+ creatingActivity: boolean;
46
+ avoidAutoScheduleBeforeDrag: boolean;
47
+ maxPerformance: boolean;
48
+ allCheckedTaskIds: ActivityId$1[];
49
+ }
50
+
20
51
  /** Named normalized activity scheduling constraints. */
21
52
  declare const CONSTRAINT_TYPE: {
22
53
  readonly ASAP: "asap";
@@ -247,6 +278,8 @@ declare const DISPATCH_ACTION_KIND: {
247
278
  readonly ACTIVITY_INDENT: "activity-indent";
248
279
  readonly ACTIVITY_OUTDENT: "activity-outdent";
249
280
  readonly ACTIVITY_TYPE_SET: "activity-type-set";
281
+ readonly ACTIVITY_FIELDS_RESTORE: "activity-fields-restore";
282
+ readonly HISTORY_REVERT: "history-revert";
250
283
  readonly ACTIVITY_SET_PROGRESS: "activity-set-progress";
251
284
  readonly ACTIVITY_LOOKAHEAD_CONVERT: "activity-lookahead-convert";
252
285
  readonly SELECTION_TOGGLE: "selection-toggle";
@@ -458,6 +491,21 @@ declare function isRootParent(parent: unknown): boolean;
458
491
  */
459
492
  declare function normalizeParentKey(parent: unknown): string;
460
493
 
494
+ interface PrefixStats {
495
+ min: string;
496
+ max: string;
497
+ next: string;
498
+ quantity: number;
499
+ usedSuffixes: Set<string>;
500
+ boundsDirty?: boolean;
501
+ }
502
+ interface CustomIdTrackerSnapshot {
503
+ readonly defaultPrefix: string;
504
+ readonly suffixIncrement: string;
505
+ readonly prefixes: Map<string, PrefixStats>;
506
+ readonly processedIds: Set<string>;
507
+ }
508
+
461
509
  /** Sort directions accepted by visual-order rules. */
462
510
  declare const ORDER_DIRECTION: {
463
511
  readonly ASCENDING: "asc";
@@ -612,6 +660,27 @@ declare function buildGroupRowId(attributeKey: string, valueId: string): string;
612
660
  */
613
661
  declare function appendGroupRowId(parentRowId: string, attributeKey: string, valueId: string): string;
614
662
 
663
+ /**
664
+ * Activity fields a user edit sets directly, which an
665
+ * `activity-fields-restore` command may write back. Everything else on an
666
+ * activity (dates of other activities, roll-ups, critical path, slack,
667
+ * correlatives, hierarchy) is derived again by the post-mutation passes.
668
+ */
669
+ declare const RESTORABLE_ACTIVITY_FIELDS: readonly ["name", "description", "startDate", "endDate", "durationHours", "constraintType", "constraintDate", "autoScheduling", "calendarId", "progress", "cost", "usedCost", "realCost", "workHours", "realWorkHours", "ponderator", "hasCustomPonderator", "customId", "subcontractId", "responsableIds", "tagIds", "p6"];
670
+ /** One field an `activity-fields-restore` command may write back. */
671
+ type RestorableActivityField = (typeof RESTORABLE_ACTIVITY_FIELDS)[number];
672
+ /**
673
+ * Hierarchy and type fields a structural edit (move, indent, delete, type
674
+ * change) sets, which only `history-revert` writes back.
675
+ */
676
+ declare const STRUCTURE_ACTIVITY_FIELDS: readonly ["parentId", "type", "correlativeId"];
677
+ /** One field a `history-revert` command may write back. */
678
+ type RevertibleActivityField = RestorableActivityField | (typeof STRUCTURE_ACTIVITY_FIELDS)[number];
679
+ /** Whether `field` may be written back by `history-revert`. */
680
+ declare function isRevertibleActivityField(field: string): field is RevertibleActivityField;
681
+ /** Whether `field` may be written back by `activity-fields-restore`. */
682
+ declare function isRestorableActivityField(field: string): field is RestorableActivityField;
683
+
615
684
  /** Backend-encoded work shift consumed during calendar normalization. */
616
685
  interface BackendShiftInput {
617
686
  shift_string: string;
@@ -803,6 +872,24 @@ declare const ACTIVITY_SAVE_FIELD_POLICY: {
803
872
  type PersistableActivityField = {
804
873
  [Field in keyof typeof ACTIVITY_SAVE_FIELD_POLICY]: (typeof ACTIVITY_SAVE_FIELD_POLICY)[Field] extends typeof SAVE_FIELD_POLICY.TRACKED ? Field : never;
805
874
  }[keyof typeof ACTIVITY_SAVE_FIELD_POLICY];
875
+ /** A persisted activity whose only change since the last save is its correlative. */
876
+ interface RenumberedActivity {
877
+ readonly id: string;
878
+ readonly proplannerId: number;
879
+ readonly correlativeId: number;
880
+ }
881
+ /**
882
+ * Persisted activities pending a save, split so a renumbering stays a list of
883
+ * correlatives instead of whole activities.
884
+ */
885
+ interface ModifiedActivityChanges {
886
+ /** Defensive snapshots of the modified persisted activities that are not renumbered only. */
887
+ readonly activities: ReadonlyArray<Readonly<CoreActivity>>;
888
+ /** Changed persisted fields of each of those activities, by activity ID. */
889
+ readonly fields: ReadonlyMap<string, ReadonlyArray<PersistableActivityField>>;
890
+ /** The activities whose only changed persisted field is `correlativeId`. */
891
+ readonly renumbered: ReadonlyArray<RenumberedActivity>;
892
+ }
806
893
 
807
894
  /** Low-level dependency operation accepted by the canonical dispatcher. */
808
895
  type LinksBatchOperation = {
@@ -874,6 +961,24 @@ interface PersistedEntityIdentity {
874
961
  interface PersistenceCheckpoint {
875
962
  readonly activities: ReadonlyArray<Readonly<CoreActivity>>;
876
963
  readonly links: ReadonlyArray<Readonly<Link>>;
964
+ /**
965
+ * Set when the checkpoint carries only the entities pending at that point
966
+ * (read with `pendingOnly`); every other entity keeps its saved image.
967
+ */
968
+ readonly pending?: {
969
+ readonly activityIds: ReadonlyArray<string>;
970
+ readonly linkIds: ReadonlyArray<string>;
971
+ /**
972
+ * The pending activities whose only change is their correlative: they
973
+ * are not in `activities`, and the checkpoint is only acknowledged by
974
+ * the schedule that read it.
975
+ */
976
+ readonly renumbered?: ReadonlyArray<{
977
+ readonly id: string;
978
+ readonly proplannerId: number;
979
+ readonly correlativeId: number;
980
+ }>;
981
+ };
877
982
  readonly p6Settings?: Readonly<P6ScheduleSettings> | null;
878
983
  readonly p6ProjectState?: Readonly<P6ProjectState> | null;
879
984
  readonly p6LatestRunLog?: Readonly<P6ScheduleRunLog> | null;
@@ -1083,6 +1188,7 @@ type DispatchAction = {
1083
1188
  activities?: ReadonlyArray<PersistedEntityIdentity>;
1084
1189
  links?: ReadonlyArray<PersistedEntityIdentity>;
1085
1190
  checkpoint?: PersistenceCheckpoint;
1191
+ retainHistory?: boolean;
1086
1192
  } | {
1087
1193
  kind: typeof DISPATCH_ACTION_KIND.PERSISTENCE_REBASE;
1088
1194
  remote: PersistenceRebaseInput;
@@ -1212,6 +1318,18 @@ type DispatchAction = {
1212
1318
  activityId: ActivityId;
1213
1319
  pendingRequests: ReadonlyArray<PendingRequest>;
1214
1320
  eventSource?: string;
1321
+ } | {
1322
+ kind: typeof DISPATCH_ACTION_KIND.ACTIVITY_FIELDS_RESTORE;
1323
+ activities: ReadonlyArray<ActivityFieldsRestoreEntry>;
1324
+ eventSource?: string;
1325
+ } | {
1326
+ kind: typeof DISPATCH_ACTION_KIND.HISTORY_REVERT;
1327
+ restoreActivities: ReadonlyArray<CoreActivity>;
1328
+ removeActivityIds: ReadonlyArray<ActivityId>;
1329
+ activityFields: ReadonlyArray<HistoryRevertFieldsEntry>;
1330
+ restoreLinks: ReadonlyArray<HistoryRevertLink>;
1331
+ removeLinkIds: ReadonlyArray<LinkId>;
1332
+ eventSource?: string;
1215
1333
  } | {
1216
1334
  kind: typeof DISPATCH_ACTION_KIND.ACTIVITY_LOOKAHEAD_SYNC;
1217
1335
  activityIds: ReadonlyArray<ActivityId>;
@@ -1254,6 +1372,12 @@ interface DispatchOptions {
1254
1372
  skipCriticalPath?: boolean;
1255
1373
  /** Rejects create/update commands that touch an activity with children. */
1256
1374
  rejectParentLinkMutations?: boolean;
1375
+ /**
1376
+ * Instant the operation happens at. Replaces the clock and the system time
1377
+ * for this operation, so replicas that apply the same operations reach the
1378
+ * same state.
1379
+ */
1380
+ at?: Date;
1257
1381
  /** Confirmation kinds the caller grants for this operation. */
1258
1382
  confirmations?: readonly ConfirmationKind[];
1259
1383
  /**
@@ -1346,7 +1470,6 @@ declare const SCHEDULE_EFFECT_KIND: {
1346
1470
  declare const SIR_AUTO_REJECT_REASON: {
1347
1471
  readonly DATE_CHANGED: "date_changed";
1348
1472
  readonly ACTIVITY_DELETED: "activity_deleted";
1349
- readonly ACTIVITY_COMPLETED: "activity_completed";
1350
1473
  };
1351
1474
  /** Consumer integration effect included in a change set. */
1352
1475
  type ScheduleEffect = {
@@ -1438,6 +1561,24 @@ interface ChangeSet {
1438
1561
  p6Settings?: P6SettingsChange;
1439
1562
  p6ProjectPlannedStart?: P6ProjectPlannedStartChange;
1440
1563
  }
1564
+ /** Input fields of one activity written back as they were, keyed by field. */
1565
+ interface ActivityFieldsRestoreEntry {
1566
+ readonly activityId: ActivityId;
1567
+ readonly fields: Readonly<Partial<Pick<CoreActivity, RestorableActivityField>>>;
1568
+ }
1569
+ /** Fields of one activity a `history-revert` command writes back. */
1570
+ interface HistoryRevertFieldsEntry {
1571
+ readonly activityId: ActivityId;
1572
+ readonly fields: Readonly<Partial<Pick<CoreActivity, RevertibleActivityField>>>;
1573
+ }
1574
+ /** A deleted link a `history-revert` command brings back, lag in hours. */
1575
+ interface HistoryRevertLink {
1576
+ readonly linkId: LinkId;
1577
+ readonly source: ActivityId;
1578
+ readonly target: ActivityId;
1579
+ readonly type: LinkType;
1580
+ readonly lagHours: number;
1581
+ }
1441
1582
 
1442
1583
  declare const P6_CRITICAL_ACTIVITY_METHOD: {
1443
1584
  readonly TOTAL_FLOAT: "total_float";
@@ -1844,13 +1985,13 @@ interface CoreActivity {
1844
1985
  subcontractId: number | null;
1845
1986
  isLookahead: boolean;
1846
1987
  hasLookaheadTasks: boolean;
1847
- newActivityIds: ActivityId[];
1988
+ newActivityIds: ReadonlyArray<ActivityId>;
1848
1989
  hasNewActivities: boolean;
1849
1990
  isNewActivity?: true | null;
1850
- pendingRequestIds: string[];
1851
- responsableIds: string[];
1852
- tagIds: string[];
1853
- baselinePoints: CoreBaselinePoint[];
1991
+ pendingRequestIds: ReadonlyArray<string>;
1992
+ responsableIds: ReadonlyArray<string>;
1993
+ tagIds: ReadonlyArray<string>;
1994
+ baselinePoints: ReadonlyArray<CoreBaselinePoint>;
1854
1995
  baselineSnapshot: ActivityBaselineSnapshot | null;
1855
1996
  /** Summary roll-up duration in working hours. */
1856
1997
  recursiveDurationHours: number;
@@ -1882,6 +2023,17 @@ interface CoreActivity {
1882
2023
  criticalPath: CriticalPathResult | null;
1883
2024
  p6?: P6ActivityDraftState;
1884
2025
  }
2026
+ interface PromotionSnapshot {
2027
+ type: typeof ACTIVITY_TYPE.TASK | typeof ACTIVITY_TYPE.MILESTONE;
2028
+ startDate: Date;
2029
+ endDate: Date;
2030
+ durationHours: number;
2031
+ expectedProgressBaseline: number | null;
2032
+ constraintType: ConstraintType;
2033
+ constraintDate: Date | null;
2034
+ progress: number;
2035
+ p6?: P6ActivityDraftState;
2036
+ }
1885
2037
  /** Normalized dependency-link snapshot. */
1886
2038
  interface Link {
1887
2039
  id: LinkId;
@@ -1968,6 +2120,8 @@ interface EntityChange<T> {
1968
2120
  }> | undefined;
1969
2121
  /** Complete post-change snapshot, or `null` for deletion. */
1970
2122
  after: Readonly<T> | null;
2123
+ /** Complete pre-change snapshot of a deleted entity, to bring it back. */
2124
+ before?: Readonly<T> | undefined;
1971
2125
  }
1972
2126
 
1973
2127
  declare const CREATION_OVERRIDE_FIELD_LIST: readonly ["name", "description", "type", "startDate", "durationHours", "constraintType", "constraintDate", "calendarId", "assignedDefaultCalendar", "autoScheduling", "progress", "cost", "usedCost", "realCost", "workHours", "realWorkHours", "ponderator", "hasCustomPonderator", "customId", "subcontractId", "responsableIds", "tagIds", "isLookahead"];
@@ -2158,6 +2312,18 @@ interface ActivityBatchInput extends MutationContext {
2158
2312
  readonly items: ReadonlyArray<ActivityBatchItemInput>;
2159
2313
  readonly links: ReadonlyArray<ActivityBatchLinkInput>;
2160
2314
  }
2315
+ /** Input fields of activities written back as they were before an edit. */
2316
+ interface ActivityFieldsRestoreInput extends MutationContext {
2317
+ readonly activities: ReadonlyArray<ActivityFieldsRestoreEntry>;
2318
+ }
2319
+ /** One earlier edit reverted: what to bring back, remove and write back. */
2320
+ interface HistoryRevertInput extends MutationContext {
2321
+ readonly restoreActivities: ReadonlyArray<CoreActivity>;
2322
+ readonly removeActivityIds: ReadonlyArray<ActivityId>;
2323
+ readonly activityFields: ReadonlyArray<HistoryRevertFieldsEntry>;
2324
+ readonly restoreLinks: ReadonlyArray<HistoryRevertLink>;
2325
+ readonly removeLinkIds: ReadonlyArray<LinkId>;
2326
+ }
2161
2327
  /** Consumer lookahead state synchronized into core-owned activity state. */
2162
2328
  interface ActivityLookaheadSyncInput extends MutationContext {
2163
2329
  readonly activityIds: ReadonlyArray<ActivityId>;
@@ -2379,9 +2545,10 @@ interface ScheduleActivitiesApi {
2379
2545
  *
2380
2546
  * @param activityIds - IDs to delete.
2381
2547
  * @param context - Optional consumer event source.
2548
+ * @param options - Per-operation autoschedule and critical-path controls.
2382
2549
  * @returns The complete dispatch result.
2383
2550
  */
2384
- remove(activityIds: ReadonlyArray<ActivityId>, context?: MutationContext): Promise<DispatchResult>;
2551
+ remove(activityIds: ReadonlyArray<ActivityId>, context?: MutationContext, options?: DispatchOptions): Promise<DispatchResult>;
2385
2552
  /** Plans one canonical Schedule-to-Lookahead conversion without mutation. */
2386
2553
  planLookaheadConversion(input: LookaheadConversionInput): LookaheadConversionPlan;
2387
2554
  /** Applies the same conversion intent under its planned state revision. */
@@ -2480,6 +2647,22 @@ interface ScheduleActivitiesApi {
2480
2647
  * @returns The complete dispatch result.
2481
2648
  */
2482
2649
  lookaheadSync(input: ActivityLookaheadSyncInput): Promise<DispatchResult>;
2650
+ /**
2651
+ * Writes input fields of activities back to earlier values and derives the
2652
+ * rest again, reverting one edit without undoing later ones.
2653
+ *
2654
+ * @param input - The activities and the field values to write back.
2655
+ * @returns The complete dispatch result.
2656
+ */
2657
+ restoreFields(input: ActivityFieldsRestoreInput): Promise<DispatchResult>;
2658
+ /**
2659
+ * Reverts one earlier edit, structure included: brings back what it
2660
+ * deleted, removes what it created and writes back what it changed.
2661
+ *
2662
+ * @param input - What to bring back, remove and write back.
2663
+ * @returns The complete dispatch result.
2664
+ */
2665
+ revert(input: HistoryRevertInput): Promise<DispatchResult>;
2483
2666
  /** Runs canonical autoscheduling for one activity or the whole schedule. */
2484
2667
  autoSchedule(activityId?: ActivityId, options?: DispatchOptions): Promise<DispatchResult>;
2485
2668
  /**
@@ -2737,6 +2920,16 @@ interface SchedulePersistenceApi {
2737
2920
  modifiedActivities(): ReadonlyArray<Readonly<CoreActivity>>;
2738
2921
  /** @returns Modified persisted fields grouped by activity ID. */
2739
2922
  modifiedActivityFields(): ReadonlyMap<string, ReadonlyArray<PersistableActivityField>>;
2923
+ /**
2924
+ * Reads the modified persisted activities in one pass, with the ones whose
2925
+ * only change is `correlativeId` returned as `{ id, proplannerId,
2926
+ * correlativeId }` instead of whole snapshots.
2927
+ *
2928
+ * @returns `activities` and `fields` as {@link SchedulePersistenceApi.modifiedActivities}
2929
+ * and {@link SchedulePersistenceApi.modifiedActivityFields} return them minus
2930
+ * the renumbered ones, plus `renumbered`.
2931
+ */
2932
+ modifiedActivityChanges(): ModifiedActivityChanges;
2740
2933
  /** @returns Defensive snapshots of not-yet-persisted activities. */
2741
2934
  newActivities(): ReadonlyArray<Readonly<CoreActivity>>;
2742
2935
  /** @returns Deleted persisted activity identities since the last save. */
@@ -2888,6 +3081,31 @@ interface ScheduleApiNamespaces {
2888
3081
  readonly diagnostics: ScheduleDiagnosticsApi;
2889
3082
  }
2890
3083
 
3084
+ interface SerializedCalendar {
3085
+ id: CalendarId;
3086
+ worktime?: {
3087
+ hours?: (string | number)[];
3088
+ days?: Array<boolean | string[]>;
3089
+ dates?: Record<string, false | string[]>;
3090
+ customWeeks?: Record<string, unknown>;
3091
+ } | undefined;
3092
+ [key: string]: unknown;
3093
+ }
3094
+ interface StateSnapshot {
3095
+ activities: CoreActivity[];
3096
+ links: LinkSnapshot[];
3097
+ calendars: SerializedCalendar[];
3098
+ takenAt?: string;
3099
+ defaultCalendarId?: CalendarId | null;
3100
+ autoScheduleConfig?: {
3101
+ auto_scheduling: boolean;
3102
+ auto_scheduling_initial: boolean;
3103
+ auto_scheduling_use_progress: boolean;
3104
+ schedule_from_end: boolean;
3105
+ };
3106
+ runtimeFlags?: Record<string, boolean | string>;
3107
+ }
3108
+
2891
3109
  /** Consumer diagnostics sink for normalization and background failures. */
2892
3110
  interface ScheduleCoreReporter {
2893
3111
  /** Reports a recoverable warning with optional safe context. */
@@ -2896,35 +3114,24 @@ interface ScheduleCoreReporter {
2896
3114
  error(message: string, cause?: unknown): void;
2897
3115
  }
2898
3116
 
2899
- /** Stable validation reasons for rejected dependency operations. */
2900
- declare const LINK_REJECTION_REASON: {
2901
- readonly SELF_LINK: "self-link";
2902
- readonly CYCLE: "cycle";
2903
- readonly DUPLICATE: "duplicate";
2904
- readonly ACTIVITY_MISSING: "activity-missing";
2905
- readonly LINK_MISSING: "link-missing";
2906
- readonly HIERARCHY_LINK: "hierarchy-link";
2907
- };
2908
- /** Stable validation reason for a rejected dependency operation. */
2909
- type LinkRejection = (typeof LINK_REJECTION_REASON)[keyof typeof LINK_REJECTION_REASON];
3117
+ interface ViewStateSnapshot {
3118
+ readonly checked: ReadonlySet<ActivityId>;
3119
+ readonly hidden: ReadonlySet<ActivityId>;
3120
+ readonly activeFilter: FilterState | null;
3121
+ readonly activeOrder: OrderState | null;
3122
+ }
2910
3123
 
2911
- declare const LOAD_DIAGNOSTIC_CODE: {
2912
- readonly INVALID_BASELINE_POINT: "invalid_baseline_point";
2913
- readonly UNKNOWN_CONSTRAINT: "unknown_constraint";
2914
- readonly PROGRESS_OUT_OF_RANGE: "progress_out_of_range";
2915
- readonly ORPHAN_ACTIVITY: "orphan_activity";
2916
- readonly INVALID_LINK: "invalid_link";
2917
- readonly DUPLICATE_LINK: "duplicate_link";
2918
- };
2919
- /** Data-quality anomaly category detected while loading a schedule. */
2920
- type LoadDiagnosticCode = (typeof LOAD_DIAGNOSTIC_CODE)[keyof typeof LOAD_DIAGNOSTIC_CODE];
2921
- /** Aggregated load anomaly count with bounded representative IDs. */
2922
- interface LoadDiagnostic {
2923
- readonly code: LoadDiagnosticCode;
2924
- readonly count: number;
2925
- readonly sampleIds: readonly string[];
3124
+ interface ScheduleStateSnapshot {
3125
+ readonly activities: CoreActivity[];
3126
+ readonly links: LinkSnapshot[];
3127
+ readonly calendars: StateSnapshot['calendars'];
3128
+ readonly viewState: ViewStateSnapshot;
3129
+ readonly lastStartDate: Map<ActivityId, Date>;
3130
+ readonly promotionSnapshot: Map<ActivityId, PromotionSnapshot>;
3131
+ readonly progressFallback: Map<ActivityId, number>;
3132
+ readonly flags: ScheduleFlags;
3133
+ readonly scheduleSettled: boolean;
2926
3134
  }
2927
- type LoadDiagnosticRecorder = (code: LoadDiagnosticCode, sampleId: string) => void;
2928
3135
 
2929
3136
  /** Reason a Data Date operation is refused before any state is written. */
2930
3137
  type P6CapabilityErrorCode = 'capability_not_enabled' | 'data_date_required' | 'activity_scheduling_state_required' | 'P6_ACTIVITY_STATE_INVARIANT' | 'EXTERNAL_RELATIONSHIP_F9_NOT_CERTIFIED';
@@ -2994,13 +3201,56 @@ interface ScheduleP6Api {
2994
3201
  changes: ChangeSet;
2995
3202
  }>;
2996
3203
  /** Dispatches a P6 activity update and returns the resulting ChangeSet. */
2997
- updateActivity(activityId: ActivityId, patch: Readonly<P6ActivityInputPatch>): Promise<{
3204
+ updateActivity(activityId: ActivityId, patch: Readonly<P6ActivityInputPatch>, options?: Readonly<P6CommandOptions>): Promise<{
2998
3205
  changes: ChangeSet;
2999
3206
  }>;
3000
3207
  /** Runs F9 with the current settings merged with `patch` and applies the projection. */
3001
- schedule(patch?: Readonly<Partial<P6ScheduleSettings>>): Promise<P6ScheduleResult>;
3208
+ schedule(patch?: Readonly<Partial<P6ScheduleSettings>>, options?: Readonly<P6CommandOptions>): Promise<P6ScheduleResult>;
3209
+ }
3210
+ /** Options of a Data Date command, as {@link DispatchOptions} for dispatch. */
3211
+ interface P6CommandOptions {
3212
+ /** Instant the command happens at; stamps the run log a schedule writes. */
3213
+ readonly at?: Date;
3214
+ }
3215
+
3216
+ /** The Data Date state a schedule snapshot carries beside its activities. */
3217
+ interface DataDateSnapshot {
3218
+ readonly settings: P6ScheduleSettings | null;
3219
+ readonly projectState: P6ProjectState | null;
3220
+ readonly latestRunLog: P6ScheduleRunLog | null;
3221
+ readonly externalRelationshipIds: readonly string[];
3002
3222
  }
3003
3223
 
3224
+ /** Stable validation reasons for rejected dependency operations. */
3225
+ declare const LINK_REJECTION_REASON: {
3226
+ readonly SELF_LINK: "self-link";
3227
+ readonly CYCLE: "cycle";
3228
+ readonly DUPLICATE: "duplicate";
3229
+ readonly ACTIVITY_MISSING: "activity-missing";
3230
+ readonly LINK_MISSING: "link-missing";
3231
+ readonly HIERARCHY_LINK: "hierarchy-link";
3232
+ };
3233
+ /** Stable validation reason for a rejected dependency operation. */
3234
+ type LinkRejection = (typeof LINK_REJECTION_REASON)[keyof typeof LINK_REJECTION_REASON];
3235
+
3236
+ declare const LOAD_DIAGNOSTIC_CODE: {
3237
+ readonly INVALID_BASELINE_POINT: "invalid_baseline_point";
3238
+ readonly UNKNOWN_CONSTRAINT: "unknown_constraint";
3239
+ readonly PROGRESS_OUT_OF_RANGE: "progress_out_of_range";
3240
+ readonly ORPHAN_ACTIVITY: "orphan_activity";
3241
+ readonly INVALID_LINK: "invalid_link";
3242
+ readonly DUPLICATE_LINK: "duplicate_link";
3243
+ };
3244
+ /** Data-quality anomaly category detected while loading a schedule. */
3245
+ type LoadDiagnosticCode = (typeof LOAD_DIAGNOSTIC_CODE)[keyof typeof LOAD_DIAGNOSTIC_CODE];
3246
+ /** Aggregated load anomaly count with bounded representative IDs. */
3247
+ interface LoadDiagnostic {
3248
+ readonly code: LoadDiagnosticCode;
3249
+ readonly count: number;
3250
+ readonly sampleIds: readonly string[];
3251
+ }
3252
+ type LoadDiagnosticRecorder = (code: LoadDiagnosticCode, sampleId: string) => void;
3253
+
3004
3254
  /**
3005
3255
  * Lifecycle health states observable without awaiting initialization.
3006
3256
  * `ready` means alive, not initialized; await {@link ScheduleCore.ready} before
@@ -3031,6 +3281,16 @@ interface ScheduleCoreInput extends BackendScheduleInput {
3031
3281
  clock?: () => Date;
3032
3282
  /** Makes `ready` wait for initial critical-path calculation when `true`. */
3033
3283
  criticalPathOnLoad?: boolean;
3284
+ /**
3285
+ * Keeps a settled critical-path result until `criticalPathReady` is read;
3286
+ * defaults to `true`. Hosts that never read it pass `false`.
3287
+ */
3288
+ retainCriticalPathResult?: boolean;
3289
+ /**
3290
+ * Tracks changes since the last acknowledged save; defaults to `true`.
3291
+ * Hosts that persist each ChangeSet pass `false`.
3292
+ */
3293
+ trackPersistence?: boolean;
3034
3294
  /** Initial baseline- or actual-based status mode. */
3035
3295
  statusCriteria?: StatusCriteria;
3036
3296
  /** Optional consumer schedule identifier retained in sector metadata. */
@@ -3042,6 +3302,39 @@ interface ScheduleCoreInput extends BackendScheduleInput {
3042
3302
  p6?: P6ScheduleInput;
3043
3303
  }
3044
3304
 
3305
+ declare const SCHEDULE_CORE_SNAPSHOT_VERSION = 1;
3306
+ /**
3307
+ * Where the generators of new activity, link and unique correlative ids
3308
+ * continue from.
3309
+ */
3310
+ interface IdCounters {
3311
+ readonly activity: number;
3312
+ readonly link: number;
3313
+ readonly uniqueCorrelative: number;
3314
+ }
3315
+ /**
3316
+ * Complete shared state of one schedule core, enough for another core to
3317
+ * continue from it and reach the same results. Per-user state such as undo
3318
+ * history, clipboards, and active filters is not included. Carry it between
3319
+ * processes with `encodeWireValue` / `decodeWireValue`.
3320
+ */
3321
+ interface ScheduleCoreSnapshot {
3322
+ readonly version: typeof SCHEDULE_CORE_SNAPSHOT_VERSION;
3323
+ readonly sector: SectorMetadata;
3324
+ readonly calendars: Calendar[];
3325
+ readonly baseCalendars: Calendar[];
3326
+ readonly state: ScheduleStateSnapshot;
3327
+ readonly activityIdCounter: number;
3328
+ readonly linkIdCounter: number;
3329
+ readonly uniqueCorrelativeIdCounter: number;
3330
+ readonly customIds: CustomIdTrackerSnapshot;
3331
+ readonly criticalPathSettled: boolean;
3332
+ readonly lastOperationAt: Date | null;
3333
+ readonly dataDate: DataDateSnapshot | null;
3334
+ }
3335
+ /** Host options for a core restored from a {@link ScheduleCoreSnapshot}. */
3336
+ type ScheduleCoreRestoreOptions = Pick<ScheduleCoreInput, 'clock' | 'reporter' | 'isDataDateEnabled' | 'retainCriticalPathResult' | 'trackPersistence'>;
3337
+
3045
3338
  /** Summary of logical links and projected effective dependency edges. */
3046
3339
  interface EffectiveGraphAudit {
3047
3340
  /** Number of current activities. */
@@ -3120,6 +3413,18 @@ declare class ScheduleCore {
3120
3413
  * @param input - Backend schedule data plus initialization options.
3121
3414
  */
3122
3415
  constructor(input: ScheduleCoreInput);
3416
+ private _initSaveTracker;
3417
+ /**
3418
+ * Captures the shared state after every queued operation, so another core
3419
+ * restored with {@link ScheduleCore.fromSnapshot} reaches the same results.
3420
+ */
3421
+ exportSnapshot(): Promise<ScheduleCoreSnapshot>;
3422
+ /**
3423
+ * Restores a core from {@link ScheduleCore.exportSnapshot} without
3424
+ * normalization or initial passes. The new core takes ownership of the
3425
+ * snapshot.
3426
+ */
3427
+ static fromSnapshot(snapshot: ScheduleCoreSnapshot, options?: ScheduleCoreRestoreOptions): ScheduleCore;
3123
3428
  /**
3124
3429
  * Resolves after initialization, and after initial critical path when
3125
3430
  * `criticalPathOnLoad` is enabled.
@@ -3138,13 +3443,17 @@ declare class ScheduleCore {
3138
3443
  * Tracks the critical-path job current when this property is read.
3139
3444
  *
3140
3445
  * Later automatic work, including undo or redo recomputation, can replace
3141
- * the promise returned by subsequent reads. Use `whenSettled()` to wait for
3142
- * the current schedule revision.
3446
+ * the promise returned by subsequent reads. Once a job has been read and has
3447
+ * resolved, the engine releases its result: later reads resolve to `null`
3448
+ * until a newer job starts. Use `whenSettled()` to wait for the current
3449
+ * schedule revision.
3143
3450
  * Apply a non-null `changes` value to the consumer-owned projection.
3144
3451
  */
3145
3452
  get criticalPathReady(): Promise<{
3146
3453
  changes: ChangeSet;
3147
3454
  } | null>;
3455
+ private _trackCriticalPathJob;
3456
+ private _releaseCriticalPathResult;
3148
3457
  /**
3149
3458
  * Current lifecycle health; `ready` can be observed before initialization
3150
3459
  * finishes, so await {@link ScheduleCore.ready} before normal use.
@@ -3358,12 +3667,18 @@ declare class ScheduleCore {
3358
3667
  getModifiedActivities(): ReadonlyArray<Readonly<CoreActivity>>;
3359
3668
  /** @returns Modified persisted fields grouped by activity ID; no I/O occurs. */
3360
3669
  getModifiedActivityFields(): ReadonlyMap<string, ReadonlyArray<PersistableActivityField>>;
3670
+ /** @returns Modified persisted activities with renumber-only ones split out; no I/O occurs. */
3671
+ getModifiedActivityChanges(): ModifiedActivityChanges;
3361
3672
  /** @returns Defensive snapshots of not-yet-persisted activities; no I/O occurs. */
3362
3673
  getNewActivities(): ReadonlyArray<Readonly<CoreActivity>>;
3363
3674
  /** @returns Whether tracked state differs from the acknowledged save baseline. */
3364
3675
  hasUnsavedChanges(): boolean;
3365
3676
  /** @returns The P6 schedule settings pending persistence, or `null` when unchanged since the last acknowledge. */
3366
3677
  getModifiedDataDateSettings(): Readonly<P6ScheduleSettings> | null;
3678
+ /** @returns The latest P6 schedule run pending persistence, or `null` when unchanged since the last acknowledge. */
3679
+ getModifiedDataDateLatestRunLog(): {
3680
+ readonly latestRunLog: Readonly<P6ScheduleRunLog> | null;
3681
+ } | null;
3367
3682
  /** @returns The P6 state of every activity whose Data Date fields changed since the last acknowledge, keyed by activity id. */
3368
3683
  getModifiedDataDateActivities(): ReadonlyMap<string, Readonly<P6ActivityDraftState>>;
3369
3684
  /** @returns The monotonic scheduling revision without a readiness guard. */
@@ -3372,10 +3687,24 @@ declare class ScheduleCore {
3372
3687
  getStateRevision(): number;
3373
3688
  /** @returns The undo-history boundary for an external save checkpoint. */
3374
3689
  capturePersistenceHistoryBoundary(): number;
3375
- /** @returns A defensive checkpoint for consumer-owned persistence. */
3376
- readPersistenceCheckpoint(): PersistenceCheckpoint;
3690
+ /**
3691
+ * @param options - `pendingOnly` reads only the entities that may differ
3692
+ * from the last acknowledged save, for a consumer that persists those.
3693
+ * @returns A defensive checkpoint for consumer-owned persistence.
3694
+ */
3695
+ readPersistenceCheckpoint(options?: {
3696
+ readonly pendingOnly?: boolean;
3697
+ }): PersistenceCheckpoint;
3377
3698
  /** @returns A deterministic serialization digest of canonical schedule state. */
3378
3699
  getCanonicalDigest(): string;
3700
+ /**
3701
+ * Fingerprints the state every replica of a live schedule shares: the
3702
+ * canonical state without the backend ids that only the saving server
3703
+ * learns.
3704
+ *
3705
+ * @returns A fixed-size deterministic fingerprint.
3706
+ */
3707
+ getReplicaFingerprint(): string;
3379
3708
  /** @returns A fixed-size deterministic fingerprint of canonical schedule state. */
3380
3709
  getCanonicalFingerprint(): string;
3381
3710
  private _getP6ScheduleStateFingerprint;
@@ -3406,6 +3735,7 @@ declare class ScheduleCore {
3406
3735
  private _scheduleP6;
3407
3736
  private _runP6Schedule;
3408
3737
  private _applyPreparedP6Schedule;
3738
+ private _operationNow;
3409
3739
  private _buildP6ScheduleRunLog;
3410
3740
  private _requireDataDateCapability;
3411
3741
  private _changeSetIsSubstantive;
@@ -3495,6 +3825,14 @@ declare class ScheduleCore {
3495
3825
  canUndo(): boolean;
3496
3826
  /** @returns Whether a redo entry is available; readiness is not required. */
3497
3827
  canRedo(): boolean;
3828
+ /** @returns Where the generators of new ids continue from. */
3829
+ readIdCounters(): IdCounters;
3830
+ /**
3831
+ * Continues id generation from `counters`, so a copy replaying a command
3832
+ * creates the same ids as the copy that ran it first, even when the two
3833
+ * were loaded from different sources (a snapshot or the database).
3834
+ */
3835
+ restoreIdCounters(counters: IdCounters): void;
3498
3836
  /** Clears undo and redo history without changing schedule state. */
3499
3837
  clearHistory(): void;
3500
3838
  /** @returns Current undo depth; readiness is not required. */
@@ -3507,8 +3845,11 @@ declare class ScheduleCore {
3507
3845
  destroy(): void;
3508
3846
  private readonly _initPromise;
3509
3847
  private _criticalPathReady;
3848
+ private _settledCriticalPathJob;
3510
3849
  private readonly _ready;
3511
3850
  private _saveTracker;
3851
+ private _retainCriticalPathResult;
3852
+ private _lastOperationAt;
3512
3853
  private assertReady;
3513
3854
  private _rollback;
3514
3855
  }
@@ -3523,6 +3864,100 @@ declare class ScheduleCore {
3523
3864
  */
3524
3865
  declare function createSchedule(input: ScheduleCoreInput): Promise<ScheduleCore>;
3525
3866
 
3867
+ declare const PONDERATOR_CRITERIA: readonly ["DURATION", "COST", "HH"];
3868
+ /** Everything a host loads to open a schedule the way every host opens it. */
3869
+ interface HostScheduleSource extends BackendScheduleInput {
3870
+ /** The project's ponderator criterion; overrides the sector's when set. */
3871
+ readonly projectActivityCriterion?: string | null;
3872
+ readonly baselinePoints?: readonly BaselinePoint[];
3873
+ readonly statusCriteria?: StatusCriteria;
3874
+ readonly ganttId?: number;
3875
+ /** Stored Data Date state, passed only while the Data Date rollout is on. */
3876
+ readonly p6?: ScheduleCoreInput['p6'];
3877
+ /** Whether Data Date scheduling is allowed right now (rollout and preference). */
3878
+ readonly isDataDateEnabled?: () => boolean;
3879
+ /** The clock the engine reads the current instant from. */
3880
+ readonly clock: () => Date;
3881
+ readonly reporter?: ScheduleCoreReporter;
3882
+ }
3883
+ /** The sector flags that ask the first editor to reconcile on load. */
3884
+ interface LoadTimeSectorFlags {
3885
+ readonly activity_creter?: string | null;
3886
+ readonly update_save_handle_for_calendar_update?: boolean | null;
3887
+ readonly update_ponderators_masterplan?: boolean | null;
3888
+ }
3889
+ /** One reconciliation the first editor dispatches after a schedule loads. */
3890
+ type LoadTimeAction = {
3891
+ readonly kind: typeof DISPATCH_ACTION_KIND.CALENDAR_RECONCILE;
3892
+ } | {
3893
+ readonly kind: typeof DISPATCH_ACTION_KIND.PONDERATOR_CRITERION_SET;
3894
+ readonly criterion: (typeof PONDERATOR_CRITERIA)[number];
3895
+ };
3896
+ /**
3897
+ * The reconciliations a load asks for: the actions to dispatch, whether the
3898
+ * calendars and ponderators need them, and a requested ponderator criterion
3899
+ * the engine does not know.
3900
+ */
3901
+ interface LoadTimeWork {
3902
+ readonly actions: readonly LoadTimeAction[];
3903
+ readonly calendar: boolean;
3904
+ readonly ponderators: boolean;
3905
+ readonly unresolvedPonderatorCriterion?: string;
3906
+ }
3907
+ /**
3908
+ * Builds the {@link ScheduleCoreInput} for a schedule loaded from the
3909
+ * backend, applying the same defaults in every host so a browser and a server
3910
+ * that load the same rows build the same engine.
3911
+ */
3912
+ declare function hostScheduleInput(source: HostScheduleSource): ScheduleCoreInput;
3913
+ /**
3914
+ * The reconciliation the sector asks for on load: a calendar reconcile and a
3915
+ * ponderator recompute under the effective criterion.
3916
+ */
3917
+ declare function loadTimeWork(sector: LoadTimeSectorFlags): LoadTimeWork;
3918
+ /**
3919
+ * `true` when loading moved some activity's start to another UTC day than the
3920
+ * stored one, which means the schedule has to be saved after the load.
3921
+ */
3922
+ declare function rescheduledOnLoad(stored: readonly Pick<BackendActivityInput, 'unique_id' | 'start_date'>[], startDateOf: (activityId: string) => Date | null): boolean;
3923
+
3924
+ /**
3925
+ * `true` when a stored backend date and the engine's date fall on different
3926
+ * UTC days. Unreadable values never count as moved.
3927
+ */
3928
+ declare function movedToAnotherUtcDay(stored: unknown, current: unknown): boolean;
3929
+
3930
+ /** A row the backend schedule save accepts, keyed by its wire column names. */
3931
+ type BackendRow = Record<string, unknown>;
3932
+ /** Where the rows go and how the engine's units map to the backend's. */
3933
+ interface BackendRowScope {
3934
+ readonly sectorId: number | string;
3935
+ readonly ganttId: number | string;
3936
+ readonly hoursPerDay: number;
3937
+ /** Whether an activity has children, sent as the row's `has_childs`. */
3938
+ readonly hasChildren: (activityId: string) => boolean;
3939
+ }
3940
+ /** Per-activity facts the save needs beyond the engine state. */
3941
+ interface ActivityRowFacts {
3942
+ /** The stored wire values of the row, as the backend served them. */
3943
+ readonly origin?: Readonly<Record<string, unknown>> | null;
3944
+ /** Engine fields changed since the last acknowledged save. */
3945
+ readonly changedFields?: Iterable<string>;
3946
+ readonly progressChangedByActionButton?: boolean;
3947
+ readonly progressModifiedBySDK?: boolean;
3948
+ /** Persist the engine's dates even when they stay on the stored day. */
3949
+ readonly persistCalendarAlignedDates?: boolean;
3950
+ }
3951
+ /**
3952
+ * The backend save row of one activity. Unchanged protected fields (dates,
3953
+ * duration, constraint, progress) keep their stored value unless the start
3954
+ * moved to another UTC day, so a save never rewrites what the user did not
3955
+ * touch.
3956
+ */
3957
+ declare function activityBackendRow(activity: Readonly<CoreActivity>, scope: BackendRowScope, facts?: ActivityRowFacts): BackendRow;
3958
+ /** The backend save row of one link. */
3959
+ declare function linkBackendRow(link: Readonly<Link>, scope: BackendRowScope): BackendRow;
3960
+
3526
3961
  /** Fully normalized data returned by the backend parsing boundary. */
3527
3962
  interface ParsedInput {
3528
3963
  sector: SectorMetadata;
@@ -3546,6 +3981,15 @@ interface ParsedInput {
3546
3981
  */
3547
3982
  declare function parseFromBackend(input: BackendScheduleInput, reporter?: ScheduleCoreReporter, recordDiagnostic?: LoadDiagnosticRecorder): ParsedInput;
3548
3983
 
3984
+ /**
3985
+ * Encodes an operation, its options, or a snapshot into plain JSON values.
3986
+ * Dates, Maps, and Sets survive `JSON.stringify` and {@link decodeWireValue};
3987
+ * object keys holding `undefined` are dropped.
3988
+ */
3989
+ declare function encodeWireValue(value: unknown): unknown;
3990
+ /** Restores a value produced by {@link encodeWireValue} after `JSON.parse`. */
3991
+ declare function decodeWireValue(value: unknown): unknown;
3992
+
3549
3993
  /**
3550
3994
  * Selects the normalized baseline point marked as active.
3551
3995
  *
@@ -3594,6 +4038,77 @@ interface ExpectedProgressAdapter {
3594
4038
  */
3595
4039
  declare function computeExpectedProgress(rootIds: readonly string[], now: Date, adapter: ExpectedProgressAdapter, defaultBaseCalendarId?: string | null): string[];
3596
4040
 
4041
+ type UtcTimestamp = string;
4042
+ type NullableUtcTimestamp = UtcTimestamp | null;
4043
+ type WithTimestamps<Shape, Keys extends keyof Shape> = Omit<Shape, Keys> & {
4044
+ readonly [Key in Keys]: undefined extends Shape[Key] ? NullableUtcTimestamp | undefined : NullableUtcTimestamp;
4045
+ };
4046
+ declare const SETTINGS_DATE_FIELDS: readonly ["dataDate", "projectMustFinishBy", "projectForecastStart"];
4047
+ declare const ACTIVITY_DATE_FIELDS: readonly ["actualStart", "actualFinish", "plannedStart", "plannedFinish", "expectedFinish", "suspendDate", "resumeDate", "primaryConstraintDate", "secondaryConstraintDate", "remainingEarlyStart", "remainingEarlyFinish", "remainingLateStart", "remainingLateFinish", "earlyStart", "earlyFinish", "lateStart", "lateFinish", "primaryBaselineStart", "primaryBaselineFinish"];
4048
+ declare const PERSISTED_DURATION_TYPE: Readonly<{
4049
+ readonly fixed_duration_and_units: "fixed_units_time";
4050
+ readonly fixed_duration_and_units_per_time: "fixed_duration_units";
4051
+ readonly fixed_units_time: "fixed_units_time";
4052
+ readonly fixed_duration_units: "fixed_duration_units";
4053
+ readonly fixed_units: "fixed_units";
4054
+ readonly fixed_duration_units_time: "fixed_duration_units_time";
4055
+ }>;
4056
+ type PersistedDurationType = (typeof PERSISTED_DURATION_TYPE)[keyof typeof PERSISTED_DURATION_TYPE];
4057
+ type ResourceAssignmentDto = WithTimestamps<P6ResourceAssignment, 'actualStart' | 'actualFinish'>;
4058
+ /** Data Date settings as the backend stores and serves them (UTC ISO timestamps). */
4059
+ type P6ScheduleSettingsDto = WithTimestamps<P6ScheduleSettings, (typeof SETTINGS_DATE_FIELDS)[number]>;
4060
+ /** One activity's Data Date state as the backend stores and serves it. */
4061
+ type P6ActivityStateDto = Omit<WithTimestamps<P6ActivityDraftState, (typeof ACTIVITY_DATE_FIELDS)[number]>, 'durationType' | 'resourceAssignments'> & {
4062
+ readonly durationType?: PersistedDurationType | P6ActivityDraftState['durationType'];
4063
+ readonly resourceAssignments?: readonly ResourceAssignmentDto[];
4064
+ };
4065
+ /** A schedule-run warning as the backend stores and serves it. */
4066
+ type P6ScheduleDiagnosticDto = Omit<P6ScheduleDiagnostic, 'dataDate' | 'dates'> & {
4067
+ readonly dataDate: UtcTimestamp;
4068
+ readonly dates: {
4069
+ readonly actualStart: NullableUtcTimestamp;
4070
+ readonly actualFinish: NullableUtcTimestamp;
4071
+ };
4072
+ };
4073
+ /** The latest schedule run as the backend stores and serves it. */
4074
+ type P6ScheduleRunLogDto = Omit<P6ScheduleRunLog, 'calculatedAt' | 'dataDate' | 'settings' | 'warnings'> & {
4075
+ readonly calculatedAt: NullableUtcTimestamp;
4076
+ readonly dataDate: UtcTimestamp;
4077
+ readonly settings: P6ScheduleSettingsDto;
4078
+ readonly warnings: readonly P6ScheduleDiagnosticDto[];
4079
+ };
4080
+ /** A schedule's whole Data Date state as the backend stores and serves it. */
4081
+ interface P6ScheduleDto {
4082
+ readonly settings: P6ScheduleSettingsDto;
4083
+ readonly projectPlannedStart: NullableUtcTimestamp;
4084
+ readonly activities: Readonly<Record<string, P6ActivityStateDto>>;
4085
+ readonly externalRelationshipIds?: readonly string[];
4086
+ readonly latestRunLog?: P6ScheduleRunLogDto | null;
4087
+ }
4088
+ /** The engine-side Data Date state to serialize for the backend. */
4089
+ interface P6SerializableState {
4090
+ readonly settings: Readonly<P6ScheduleSettings> | null;
4091
+ readonly projectState: Readonly<P6ProjectState> | null;
4092
+ readonly activities: readonly Readonly<CoreActivity>[];
4093
+ readonly externalRelationshipIds?: readonly string[];
4094
+ readonly latestRunLog?: Readonly<P6ScheduleRunLog> | null;
4095
+ }
4096
+ /**
4097
+ * Converts the backend's stored Data Date state into the `p6` input of
4098
+ * {@link createSchedule}. Throws on a timestamp that is not a canonical UTC
4099
+ * ISO string.
4100
+ */
4101
+ declare function p6InputFromDto(dto: P6ScheduleDto): P6ScheduleInput;
4102
+ /** Serializes Data Date settings for the backend. */
4103
+ declare function serializeP6Settings(settings: Readonly<P6ScheduleSettings>): P6ScheduleSettingsDto;
4104
+ /** Serializes one activity's Data Date state for the backend. */
4105
+ declare function serializeP6Activity(activity: Readonly<P6ActivityDraftState>): P6ActivityStateDto;
4106
+ /**
4107
+ * Serializes the engine's Data Date state for the backend; `null` when the
4108
+ * schedule has no Data Date settings.
4109
+ */
4110
+ declare function serializeP6State(input: P6SerializableState): P6ScheduleDto | null;
4111
+
3597
4112
  /**
3598
4113
  * Activity fields safe to prefill before identity, placement, dates, duration,
3599
4114
  * calendar, and unique correlative ID are chosen.
@@ -3629,10 +4144,10 @@ interface WithProplannerId {
3629
4144
  declare const getUnsavedActivities: <T extends WithProplannerId>(activities?: readonly T[]) => T[];
3630
4145
 
3631
4146
  /**
3632
- * Yields one browser message-channel turn without introducing a timer.
4147
+ * Yields one event-loop turn without introducing a timer: a message-channel
4148
+ * turn in a browser, a `setImmediate` turn in Node.
3633
4149
  *
3634
- * @returns An already-resolved promise outside a browser or without
3635
- * `MessageChannel` support.
4150
+ * @returns An already-resolved promise in a browser without `MessageChannel`.
3636
4151
  */
3637
4152
  declare function yieldToBrowser(): Promise<void>;
3638
4153
 
@@ -4004,6 +4519,7 @@ declare const REJECTION_REASON: {
4004
4519
  readonly HIERARCHY_CYCLE: "hierarchy_cycle";
4005
4520
  readonly MANUAL_SCHEDULING_ACTIVE: "manual_scheduling_active";
4006
4521
  readonly SANDBOX_PERSISTENCE_FORBIDDEN: "sandbox_persistence_forbidden";
4522
+ readonly PERSISTENCE_TRACKING_DISABLED: "persistence_tracking_disabled";
4007
4523
  readonly STALE_STATE_REVISION: "stale-state-revision";
4008
4524
  readonly INVALID_PROGRESS_VALUE: "invalid_progress_value_must_be_0_or_100";
4009
4525
  };
@@ -4021,4 +4537,4 @@ declare const DISPATCH_TRACK_EVENT: {
4021
4537
  /** Consumer analytics event name emitted by a schedule mutation. */
4022
4538
  type DispatchTrackEvent = (typeof DISPATCH_TRACK_EVENT)[keyof typeof DISPATCH_TRACK_EVENT];
4023
4539
 
4024
- export { ACTIVITY_BATCH_ACTION_KIND, ACTIVITY_BATCH_MODE, ACTIVITY_DATE_EDGE, ACTIVITY_FIELD, ACTIVITY_PONDERATOR_CRITERION, ACTIVITY_PROGRESS_ORIGIN, ACTIVITY_TYPE, type ActivityBaselineSnapshot, type ActivityBatchAction, type ActivityBatchInput, type ActivityBatchItem, type ActivityBatchItemInput, type ActivityBatchLinkInput$1 as ActivityBatchLinkInput, type ActivityBatchMode, type ActivityBatchParentReference, type ActivityBatchReference, type ActivityBulkEdit, type ActivityClipboardEntry, type ActivityClipboardReferences, type ActivityClipboardSnapshot, type ActivityCreateInput, type ActivityCreationOverrides, type ActivityCreter, type ActivityDateEdge, type ActivityDateEdit, type ActivityField, type ActivityFieldEdit, type ActivityFieldValue, type ActivityId, type ActivityLookaheadSyncInput, type ActivityMoveInput, type ActivityPasteDestination, type ActivityStatus, type ActivityType, type ApplyLookaheadConversionInput, BASELINE_ROLE, type BackendActivityInput, type BackendCalendarExceptionInput, type BackendCalendarInput, type BackendLinkInput, type BackendScheduleInput, type BackendSectorInput, type BackendShiftInput, type BaselinePoint, type BaselineRole, type BaselineVersion, type BranchOrderChange, CALENDAR_UNIT, CHANGE_SET_SOURCE_KIND, COLUMN, COMPLETED_PROGRESS, CONFIRMATION_KIND, CONSTRAINT_TYPE, CONSTRAINT_TYPE_TO_LABEL, CONSTRAINT_WARNING_KIND, CREATION_KIND, type Calendar, type CalendarId, type CalendarLike, type CalendarReaderInput, type CalendarUnit, type CalendarWorktime, type ChangeSet, type ChangeSetSource, type ColumnName, type ConfirmationAlternative, type ConfirmationKind, type ConfirmationRequest, type ConstraintType, type ConstraintWarning, type CoreActivity, type CoreBaselinePoint, type CreationKind, type CriticalPathResult, P6_PROPERTY_CONTRACT as DATA_DATE_PROPERTY_CONTRACT, DATE_GESTURE_KIND, DEFAULT_HOURS_PER_DAY, DISPATCH_ACTION_KIND, DISPATCH_ACTION_KINDS, DISPATCH_LINK_OPERATION_KIND, DISPATCH_TRACK_EVENT, type P6ActivityCalculationInputs as DataDateActivityCalculationInputs, type P6ActivityColumnKey as DataDateActivityColumnKey, type P6ActivityData as DataDateActivityData, type P6ActivityDraftState as DataDateActivityDraftState, type P6ActivityInputPatch as DataDateActivityInputPatch, type P6ActivityState as DataDateActivityState, type P6ActivityType as DataDateActivityType, P6CapabilityError as DataDateCapabilityError, type P6CapabilityErrorCode as DataDateCapabilityErrorCode, type P6DependencyReference as DataDateDependencyReference, type P6DiagnosticProjectIdentity as DataDateDiagnosticProjectIdentity, type P6DiagnosticRelationship as DataDateDiagnosticRelationship, type P6DiagnosticRelationshipType as DataDateDiagnosticRelationshipType, type P6DurationType as DataDateDurationType, type P6EndingActivityOption as DataDateEndingActivityOption, type P6EndingActivityPage as DataDateEndingActivityPage, type P6EndingActivitySearch as DataDateEndingActivitySearch, type P6MappedScheduleOptions as DataDateMappedScheduleOptions, type P6MissingActivityInput as DataDateMissingActivityInput, type P6OutOfSequencePolicy as DataDateOutOfSequencePolicy, type P6ProjectPlannedStartChange as DataDateProjectPlannedStartChange, type P6ProjectState as DataDateProjectState, type P6PropertyContractRow as DataDatePropertyContractRow, type P6PropertyEdgeCases as DataDatePropertyEdgeCases, type P6RawProjectOptions as DataDateRawProjectOptions, type P6RawScheduleOptions as DataDateRawScheduleOptions, type P6RequiredHistoricalField as DataDateRequiredHistoricalField, type P6ResourceAssignment as DataDateResourceAssignment, type P6ScheduleDiagnostic as DataDateScheduleDiagnostic, type P6ScheduleDiagnosticCode as DataDateScheduleDiagnosticCode, type P6ScheduleInput as DataDateScheduleInput, type P6ScheduleReadiness as DataDateScheduleReadiness, type P6ScheduleResult as DataDateScheduleResult, type P6ScheduleRunLog as DataDateScheduleRunLog, type P6ScheduleSettings as DataDateScheduleSettings, type P6ScheduleWarning as DataDateScheduleWarning, type P6SettingsChange as DataDateSettingsChange, type DateGesture, type DateGestureKind, type DateGesturePreview, type DatesBatchVerdict, type DeletedActivitySnapshot, type DeletedLinkSnapshot, type DispatchAction, type DispatchActionKind, type DispatchConfirmationRequest, type DispatchManyAction, type DispatchManyChangeSetSource, type DispatchManyResult, type DispatchOptions, type DispatchRejectReason, type DispatchResult, type DispatchTrackEvent, EDIT_ALERT_KEY, EDIT_DENIAL_REASON, ENTITY_CHANGE_KIND, type EditAlertKey, type EditDenialReason, type EditResult, type EditableColumnName, type EffectiveGraphAudit, type EntityChange, type ActivityBatchLinkInput as ErgonomicActivityBatchLinkInput, type ExpectedProgressAdapter, FILTER_FIELD, FILTER_LOGIC, FILTER_OPERATOR, FILTER_REJECTION_REASON, FILTER_VALUE_KIND, FLAT_WBS_DEPTH, type FilterCriterion, type FilterCriterionGroup, type FilterCriterionValue, type FilterDateRange, type FilterField, type FilterLogic, type FilterOperator, type FilterRejection, type FilterState, type FilterValueKind, GROUP_ID_PREFIX, GROUP_ID_SEPARATOR, type GroupCriterion, type GroupCriterionInput, type GroupLevelWindow, type GroupState, type GroupStateInput, type ImpactRequestSyncInput, LINK_BATCH_OPERATION_KIND, LINK_CODE, LINK_CODE_TO_TYPE, LINK_REJECTION_REASON, LINK_RELATIONSHIP, LINK_TYPE, LINK_TYPE_CODE, LOOKAHEAD_CONFIRMATION_KIND, type Link, type LinkBatchOperationKind, type LinkBatchRequest, type LinkBatchVerdict, type LinkCreateRequest, type LinkId, type LinkPatchRequest, type LinkRejection, type LinkRelationship, type LinkType, type LinkTypeCode, type LinkUpdateAction, type LinksBatchOperation, type LoadDiagnostic, type LoadDiagnosticCode, type LookaheadActualIntent, LookaheadActualTransitionError, type LookaheadActualTransitionErrorCode, type LookaheadConfirmationRequest, type LookaheadConversionFormerParent, type LookaheadConversionGroup, type LookaheadConversionInput, type LookaheadConversionMilestoneMove, type LookaheadConversionPlan, type LookaheadConversionResult, type LookaheadDerivedCalendars, type LookaheadDerivedFields, type LookaheadDerivedFieldsResolver, type LookaheadDerivedInput, type LookaheadProgressActualActivityState, type LookaheadProgressActualInput, type LookaheadProgressActualPlan, MINIMUM_GROUP_DEPTH, MINIMUM_GROUP_LEVEL, type MutationContext, NEW_ACTIVITY_DEFAULTS, NOT_STARTED_PROGRESS, ORDER_DIRECTION, ORDER_MODE, type OrderDirection, type OrderMode, type OrderRule, type OrderState, PASTE_PLACEMENT, PERSISTENCE_REBASE_CONFLICT_KIND, PERSISTENCE_REBASE_ENTITY, type ParsedInput, type PendingRequest, type PersistableActivityField, type PersistedEntityIdentity, type PersistenceCheckpoint, type PersistenceRebaseConflict, type PersistenceRebaseConflictKind, type PersistenceRebaseEntity, type PersistenceRebaseInput, type PersistenceRebaseRekey, type PersistenceRebaseRemoteChange, type PersistenceRebaseReport, type PipelineColumnName, type ProjectWorkHours, REJECTION_REASON, ROOT_PARENT_ID, SCHEDULE_CORE_STATUS, SCHEDULE_EFFECT_KIND, SIR_AUTO_REJECT_REASON, STATUS, STATUS_CRITERIA, type ScheduleActivitiesApi, type ScheduleApiNamespaces, type ScheduleAutoScheduleAction, type ScheduleBaselinesApi, type ScheduleCalendarsApi, type ScheduleCellsApi, ScheduleCore, type ScheduleCoreInput, type ScheduleCoreReporter, type ScheduleCoreStatus, type ScheduleCriticalPathApi, type ScheduleP6Api as ScheduleDataDatesApi, type ScheduleDiagnosticsApi, type ScheduleEffect, type ScheduleHistoryApi, type ScheduleImpactRequestsApi, type ScheduleLinksApi, type SchedulePersistenceApi, type ScheduleProjectionApi, type ScheduleSelectionApi, type ScheduleViewApi, type SectorMetadata, type SelectionToggleInput, type StandaloneCalendar, type StandaloneCalendarReader, type StaticActivityDefaults, type StatusCriteria, type TrackingEvent, UNASSIGNED_GROUP_LABEL, UNASSIGNED_VALUE_ID, type UndoOptions, VIEW_ATTRIBUTE_KIND, VISUAL_ROW_KIND, type ViewAttributeAssignmentInput, type ViewAttributeCatalogInput, type ViewAttributeFilterCriterion, type ViewAttributeOrderRule, type ViewAttributeValueInput, type ViewFilterInput, type ViewStateChange, type ViewStatePropChange, type VisualRow, WORK_TIME_DIRECTION, type WbsDepth, type WithProplannerId, type WorkTimeDirection, type WorkTimeQuery, allowedSecondaryConstraintTypes, appendGroupRowId, buildGroupRowId, checkNoUpdatedLinks, computeExpectedProgress, createCalendarReader, createLookaheadDerivedFields, createOutbuildP6ScheduleSettings as createOutbuildDataDateScheduleSettings, createSchedule, expectedProgressFromBaseline, formatUtcAsP6WallDate, getActiveBaseline, getUnsavedActivities, isRootParent, isViewAttributeCriterion, isViewAttributeOrderRule, mapP6ScheduleOptions as mapDataDateScheduleOptions, normalizeParentKey, parseFromBackend, parseP6DayAsCalendarStart, parseP6WallDateAsUtc, planLookaheadProgressActuals, prepareLookaheadProgressActuals, resolveExpectedFinishDateSelection, resolveLookaheadActualDateSelection, willRunCriticalPath, yieldToBrowser };
4540
+ export { ACTIVITY_BATCH_ACTION_KIND, ACTIVITY_BATCH_MODE, ACTIVITY_DATE_EDGE, ACTIVITY_FIELD, ACTIVITY_PONDERATOR_CRITERION, ACTIVITY_PROGRESS_ORIGIN, ACTIVITY_TYPE, type ActivityBaselineSnapshot, type ActivityBatchAction, type ActivityBatchInput, type ActivityBatchItem, type ActivityBatchItemInput, type ActivityBatchLinkInput$1 as ActivityBatchLinkInput, type ActivityBatchMode, type ActivityBatchParentReference, type ActivityBatchReference, type ActivityBulkEdit, type ActivityClipboardEntry, type ActivityClipboardReferences, type ActivityClipboardSnapshot, type ActivityCreateInput, type ActivityCreationOverrides, type ActivityCreter, type ActivityDateEdge, type ActivityDateEdit, type ActivityField, type ActivityFieldEdit, type ActivityFieldValue, type ActivityFieldsRestoreEntry, type ActivityFieldsRestoreInput, type ActivityId, type ActivityLookaheadSyncInput, type ActivityMoveInput, type ActivityPasteDestination, type ActivityRowFacts, type ActivityStatus, type ActivityType, type ApplyLookaheadConversionInput, BASELINE_ROLE, type BackendActivityInput, type BackendCalendarExceptionInput, type BackendCalendarInput, type BackendLinkInput, type BackendRow, type BackendRowScope, type BackendScheduleInput, type BackendSectorInput, type BackendShiftInput, type BaselinePoint, type BaselineRole, type BaselineVersion, type BranchOrderChange, CALENDAR_UNIT, CHANGE_SET_SOURCE_KIND, COLUMN, COMPLETED_PROGRESS, CONFIRMATION_KIND, CONSTRAINT_TYPE, CONSTRAINT_TYPE_TO_LABEL, CONSTRAINT_WARNING_KIND, CREATION_KIND, type Calendar, type CalendarId, type CalendarLike, type CalendarReaderInput, type CalendarUnit, type CalendarWorktime, type ChangeSet, type ChangeSetSource, type ColumnName, type ConfirmationAlternative, type ConfirmationKind, type ConfirmationRequest, type ConstraintType, type ConstraintWarning, type CoreActivity, type CoreBaselinePoint, type CreationKind, type CriticalPathResult, P6_PROPERTY_CONTRACT as DATA_DATE_PROPERTY_CONTRACT, DATE_GESTURE_KIND, DEFAULT_HOURS_PER_DAY, DISPATCH_ACTION_KIND, DISPATCH_ACTION_KINDS, DISPATCH_LINK_OPERATION_KIND, DISPATCH_TRACK_EVENT, type P6ActivityCalculationInputs as DataDateActivityCalculationInputs, type P6ActivityColumnKey as DataDateActivityColumnKey, type P6ActivityData as DataDateActivityData, type P6ActivityDraftState as DataDateActivityDraftState, type P6ActivityInputPatch as DataDateActivityInputPatch, type P6ActivityState as DataDateActivityState, type P6ActivityStateDto as DataDateActivityStateDto, type P6ActivityType as DataDateActivityType, P6CapabilityError as DataDateCapabilityError, type P6CapabilityErrorCode as DataDateCapabilityErrorCode, type P6DependencyReference as DataDateDependencyReference, type P6DiagnosticProjectIdentity as DataDateDiagnosticProjectIdentity, type P6DiagnosticRelationship as DataDateDiagnosticRelationship, type P6DiagnosticRelationshipType as DataDateDiagnosticRelationshipType, type P6DurationType as DataDateDurationType, type P6EndingActivityOption as DataDateEndingActivityOption, type P6EndingActivityPage as DataDateEndingActivityPage, type P6EndingActivitySearch as DataDateEndingActivitySearch, type P6MappedScheduleOptions as DataDateMappedScheduleOptions, type P6MissingActivityInput as DataDateMissingActivityInput, type P6OutOfSequencePolicy as DataDateOutOfSequencePolicy, type P6ProjectPlannedStartChange as DataDateProjectPlannedStartChange, type P6ProjectState as DataDateProjectState, type P6PropertyContractRow as DataDatePropertyContractRow, type P6PropertyEdgeCases as DataDatePropertyEdgeCases, type P6RawProjectOptions as DataDateRawProjectOptions, type P6RawScheduleOptions as DataDateRawScheduleOptions, type P6RequiredHistoricalField as DataDateRequiredHistoricalField, type P6ResourceAssignment as DataDateResourceAssignment, type P6ScheduleDiagnostic as DataDateScheduleDiagnostic, type P6ScheduleDiagnosticCode as DataDateScheduleDiagnosticCode, type P6ScheduleDiagnosticDto as DataDateScheduleDiagnosticDto, type P6ScheduleDto as DataDateScheduleDto, type P6ScheduleInput as DataDateScheduleInput, type P6ScheduleReadiness as DataDateScheduleReadiness, type P6ScheduleResult as DataDateScheduleResult, type P6ScheduleRunLog as DataDateScheduleRunLog, type P6ScheduleRunLogDto as DataDateScheduleRunLogDto, type P6ScheduleSettings as DataDateScheduleSettings, type P6ScheduleSettingsDto as DataDateScheduleSettingsDto, type P6ScheduleWarning as DataDateScheduleWarning, type P6SerializableState as DataDateSerializableState, type P6SettingsChange as DataDateSettingsChange, type DateGesture, type DateGestureKind, type DateGesturePreview, type DatesBatchVerdict, type DeletedActivitySnapshot, type DeletedLinkSnapshot, type DispatchAction, type DispatchActionKind, type DispatchConfirmationRequest, type DispatchManyAction, type DispatchManyChangeSetSource, type DispatchManyResult, type DispatchOptions, type DispatchRejectReason, type DispatchResult, type DispatchTrackEvent, EDIT_ALERT_KEY, EDIT_DENIAL_REASON, ENTITY_CHANGE_KIND, type EditAlertKey, type EditDenialReason, type EditResult, type EditableColumnName, type EffectiveGraphAudit, type EntityChange, type ActivityBatchLinkInput as ErgonomicActivityBatchLinkInput, type ExpectedProgressAdapter, FILTER_FIELD, FILTER_LOGIC, FILTER_OPERATOR, FILTER_REJECTION_REASON, FILTER_VALUE_KIND, FLAT_WBS_DEPTH, type FilterCriterion, type FilterCriterionGroup, type FilterCriterionValue, type FilterDateRange, type FilterField, type FilterLogic, type FilterOperator, type FilterRejection, type FilterState, type FilterValueKind, GROUP_ID_PREFIX, GROUP_ID_SEPARATOR, type GroupCriterion, type GroupCriterionInput, type GroupLevelWindow, type GroupState, type GroupStateInput, type HistoryRevertFieldsEntry, type HistoryRevertInput, type HistoryRevertLink, type HostScheduleSource, type IdCounters, type ImpactRequestSyncInput, LINK_BATCH_OPERATION_KIND, LINK_CODE, LINK_CODE_TO_TYPE, LINK_REJECTION_REASON, LINK_RELATIONSHIP, LINK_TYPE, LINK_TYPE_CODE, LOOKAHEAD_CONFIRMATION_KIND, type Link, type LinkBatchOperationKind, type LinkBatchRequest, type LinkBatchVerdict, type LinkCreateRequest, type LinkId, type LinkPatchRequest, type LinkRejection, type LinkRelationship, type LinkType, type LinkTypeCode, type LinkUpdateAction, type LinksBatchOperation, type LoadDiagnostic, type LoadDiagnosticCode, type LoadTimeAction, type LoadTimeSectorFlags, type LoadTimeWork, type LookaheadActualIntent, LookaheadActualTransitionError, type LookaheadActualTransitionErrorCode, type LookaheadConfirmationRequest, type LookaheadConversionFormerParent, type LookaheadConversionGroup, type LookaheadConversionInput, type LookaheadConversionMilestoneMove, type LookaheadConversionPlan, type LookaheadConversionResult, type LookaheadDerivedCalendars, type LookaheadDerivedFields, type LookaheadDerivedFieldsResolver, type LookaheadDerivedInput, type LookaheadProgressActualActivityState, type LookaheadProgressActualInput, type LookaheadProgressActualPlan, MINIMUM_GROUP_DEPTH, MINIMUM_GROUP_LEVEL, type ModifiedActivityChanges, type MutationContext, NEW_ACTIVITY_DEFAULTS, NOT_STARTED_PROGRESS, ORDER_DIRECTION, ORDER_MODE, type OrderDirection, type OrderMode, type OrderRule, type OrderState, PASTE_PLACEMENT, PERSISTENCE_REBASE_CONFLICT_KIND, PERSISTENCE_REBASE_ENTITY, type ParsedInput, type PendingRequest, type PersistableActivityField, type PersistedEntityIdentity, type PersistenceCheckpoint, type PersistenceRebaseConflict, type PersistenceRebaseConflictKind, type PersistenceRebaseEntity, type PersistenceRebaseInput, type PersistenceRebaseRekey, type PersistenceRebaseRemoteChange, type PersistenceRebaseReport, type PipelineColumnName, type ProjectWorkHours, REJECTION_REASON, RESTORABLE_ACTIVITY_FIELDS, ROOT_PARENT_ID, type RenumberedActivity, type RestorableActivityField, type RevertibleActivityField, SCHEDULE_CORE_STATUS, SCHEDULE_EFFECT_KIND, SIR_AUTO_REJECT_REASON, STATUS, STATUS_CRITERIA, STRUCTURE_ACTIVITY_FIELDS, type ScheduleActivitiesApi, type ScheduleApiNamespaces, type ScheduleAutoScheduleAction, type ScheduleBaselinesApi, type ScheduleCalendarsApi, type ScheduleCellsApi, ScheduleCore, type ScheduleCoreInput, type ScheduleCoreReporter, type ScheduleCoreRestoreOptions, type ScheduleCoreSnapshot, type ScheduleCoreStatus, type ScheduleCriticalPathApi, type ScheduleP6Api as ScheduleDataDatesApi, type ScheduleDiagnosticsApi, type ScheduleEffect, type ScheduleHistoryApi, type ScheduleImpactRequestsApi, type ScheduleLinksApi, type SchedulePersistenceApi, type ScheduleProjectionApi, type ScheduleSelectionApi, type ScheduleViewApi, type SectorMetadata, type SelectionToggleInput, type StandaloneCalendar, type StandaloneCalendarReader, type StaticActivityDefaults, type StatusCriteria, type TrackingEvent, UNASSIGNED_GROUP_LABEL, UNASSIGNED_VALUE_ID, type UndoOptions, VIEW_ATTRIBUTE_KIND, VISUAL_ROW_KIND, type ViewAttributeAssignmentInput, type ViewAttributeCatalogInput, type ViewAttributeFilterCriterion, type ViewAttributeOrderRule, type ViewAttributeValueInput, type ViewFilterInput, type ViewStateChange, type ViewStatePropChange, type VisualRow, WORK_TIME_DIRECTION, type WbsDepth, type WithProplannerId, type WorkTimeDirection, type WorkTimeQuery, activityBackendRow, allowedSecondaryConstraintTypes, appendGroupRowId, buildGroupRowId, checkNoUpdatedLinks, computeExpectedProgress, createCalendarReader, createLookaheadDerivedFields, createOutbuildP6ScheduleSettings as createOutbuildDataDateScheduleSettings, createSchedule, p6InputFromDto as dataDateInputFromDto, decodeWireValue, encodeWireValue, expectedProgressFromBaseline, formatUtcAsP6WallDate, getActiveBaseline, getUnsavedActivities, hostScheduleInput, isRestorableActivityField, isRevertibleActivityField, isRootParent, isViewAttributeCriterion, isViewAttributeOrderRule, linkBackendRow, loadTimeWork, mapP6ScheduleOptions as mapDataDateScheduleOptions, movedToAnotherUtcDay, normalizeParentKey, parseFromBackend, parseP6DayAsCalendarStart, parseP6WallDateAsUtc, planLookaheadProgressActuals, prepareLookaheadProgressActuals, rescheduledOnLoad, resolveExpectedFinishDateSelection, resolveLookaheadActualDateSelection, serializeP6Activity as serializeDataDateActivity, serializeP6Settings as serializeDataDateSettings, serializeP6State as serializeDataDateState, willRunCriticalPath, yieldToBrowser };