@outbuild-company/schedule-core 1.1.1 → 1.2.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.cts CHANGED
@@ -29,26 +29,37 @@ interface LinkSnapshot {
29
29
  * duration (`_targetLag = -summary.duration`) and the per-leaf offset from
30
30
  * the summary's start (`_trueLag = userLag + off_tgt(leaf)`), matching legacy
31
31
  * `_getImplicitLinks`/`_convertToFinishToStartLink` under
32
- * `auto_scheduling_move_projects`. Computed ONCE at expansion time
33
- * (`parent-link-expansion.ts`), never per scheduling tick.
32
+ * `auto_scheduling_move_projects`. `_targetLag`/`_trueLag` are computed once
33
+ * at expansion time, matching legacy relations frozen per run, and the
34
+ * per-leaf offset in `_trueLag` applies only to leaves with no incoming
35
+ * links (legacy `!c.$target.length` — a leaf with its own driver keeps
36
+ * offset 0, otherwise the frozen offset compounds on every settle).
37
+ * `_sourceLag` is the expansion-time fallback: when `_summarySourceId` is
38
+ * present (SS/SF out of a summary), the ASAP calculator re-derives it at
39
+ * evaluation time from the summary's CURRENT derived bounds so the virtual
40
+ * constraint stays anchored at the summary start even after the anchor leaf
41
+ * moves within the same run.
34
42
  *
35
- * All three must be set together (or none): a half-populated link would mix
36
- * precomputed and derived components. Only the FF/SF-into-summary path emits
37
- * them; every other link leaves them undefined and hits the fast path.
43
+ * `_summaryTargetId` marks a virtual link whose `_trueLag` bakes a NON-ZERO
44
+ * leaf offset measured from the target summary's expansion-time bounds: the
45
+ * ASAP pass refuses to pull the leaf back through such a link unless the
46
+ * predecessor itself moved in the run (a stale frozen offset must never
47
+ * drag its own leaf earlier — that is the summary-link drift bug).
48
+ *
49
+ * The three lag components must be set together (or none): a half-populated
50
+ * link would mix precomputed and derived components. Every non-virtual link
51
+ * leaves them undefined and hits the fast path.
38
52
  */
39
53
  _sourceLag?: number;
40
54
  _targetLag?: number;
41
55
  _trueLag?: number;
56
+ _summarySourceId?: ActivityId$1;
57
+ _summaryTargetId?: ActivityId$1;
42
58
  ganttId?: number;
43
59
  sectorId?: number;
44
60
  /** BE row id (distinct from the schedule-level `id`). */
45
61
  proplannerId?: number;
46
62
  }
47
- /**
48
- * Gantt-wide flags that influence scheduling decisions. Captured at the
49
- * boundary of every scheduling run.
50
- */
51
- type MutableLinkField = 'lag' | 'type';
52
63
 
53
64
  /**
54
65
  * Constraint Rules — single source of truth.
@@ -223,6 +234,8 @@ interface CoreBaselinePoint {
223
234
  workHours: number;
224
235
  versionId: number | null;
225
236
  isActiveVersion: boolean;
237
+ /** Whether this version is the one selected for visual comparison. */
238
+ isVisibleVersion: boolean;
226
239
  baseCalendarId: CalendarId | null;
227
240
  hoursPerDay: number | null;
228
241
  hoursPerWeek: number | null;
@@ -272,17 +285,6 @@ interface CoreActivity {
272
285
  expectedProgressBaseline: number | null;
273
286
  status: ActivityStatus | null;
274
287
  criticalPath: CriticalPathResult | null;
275
- /** Internal reversible leaf→project promotion state; never serialized. */
276
- promotionRestore: {
277
- type: 'task' | 'milestone';
278
- startDate: Date;
279
- endDate: Date;
280
- durationHours: number;
281
- expectedProgressBaseline: number | null;
282
- constraintType: ConstraintType;
283
- constraintDate: Date | null;
284
- progress: number;
285
- } | null;
286
288
  }
287
289
  interface Link {
288
290
  id: LinkId;
@@ -523,8 +525,25 @@ type LinksBatchOperation = {
523
525
  kind: 'delete';
524
526
  linkId: LinkId;
525
527
  };
528
+ interface PersistedEntityIdentity {
529
+ readonly id: string;
530
+ readonly proplannerId: number;
531
+ }
526
532
 
527
533
  type DispatchAction = {
534
+ kind: 'persistence-acknowledge';
535
+ activities?: ReadonlyArray<PersistedEntityIdentity>;
536
+ links?: ReadonlyArray<PersistedEntityIdentity>;
537
+ } | {
538
+ kind: 'baseline-apply';
539
+ points: ReadonlyArray<BaselinePoint>;
540
+ } | {
541
+ kind: 'ponderator-criterion-set';
542
+ criterion: ActivityCreter;
543
+ } | {
544
+ kind: 'status-criteria-set';
545
+ criteria: StatusCriteria;
546
+ } | {
528
547
  kind: 'inline-edit';
529
548
  activityId: ActivityId;
530
549
  column: string;
@@ -874,6 +893,8 @@ type DispatchResult = {
874
893
  * rechazados.
875
894
  */
876
895
  verdicts?: ReadonlyArray<DatesBatchVerdict>;
896
+ activityVerdicts?: ReadonlyArray<DatesBatchVerdict>;
897
+ linkVerdicts?: ReadonlyArray<LinkBatchVerdict>;
877
898
  /**
878
899
  * INTERNAL (undo / B4). Full pre-mutation snapshot of every
879
900
  * deleted/structurally-removed activity row, keyed by STRING id. The
@@ -903,6 +924,17 @@ type DatesBatchVerdict = {
903
924
  reason: string;
904
925
  alertKey?: string | undefined;
905
926
  };
927
+ type LinkBatchVerdict = {
928
+ operationIndex: number;
929
+ kind: LinksBatchOperation['kind'];
930
+ ok: true;
931
+ linkId: string;
932
+ } | {
933
+ operationIndex: number;
934
+ kind: LinksBatchOperation['kind'];
935
+ ok: false;
936
+ reason: string;
937
+ };
906
938
 
907
939
  interface TrackingEvent {
908
940
  name: string;
@@ -1086,56 +1118,6 @@ interface BackendScheduleInput {
1086
1118
  baseCalendars?: BackendCalendarInput[] | undefined;
1087
1119
  }
1088
1120
 
1089
- /**
1090
- * Role interfaces (Interface Segregation).
1091
- *
1092
- * Consumers receive the smallest role they need instead of the whole
1093
- * `ScheduleState`. A pure-read consumer takes `ActivityReader`; a
1094
- * read+write consumer takes `ActivityWriter`; a consumer that drives the
1095
- * per-dispatch write journal takes `WriteJournal`. `ScheduleState`
1096
- * implements all of them, so passing it anywhere a role is expected is
1097
- * still valid — the role just narrows what the callee is allowed to touch.
1098
- *
1099
- * Signatures here are copied verbatim from `ScheduleState`; the class is
1100
- * the source of truth. If the class changes a member, change the role to
1101
- * match (not the other way around).
1102
- */
1103
-
1104
- /** READ surface over the activity/link store and the hierarchy index. */
1105
- interface ActivityReader {
1106
- getActivity(activityId: ActivityId$1): CoreActivity | null;
1107
- getLastStartDate(activityId: ActivityId$1): Date | null;
1108
- getAllActivities(): ReadonlyArray<CoreActivity>;
1109
- getAllLinks(): LinkSnapshot[];
1110
- getLink(linkId: LinkId$1): LinkSnapshot | null;
1111
- activityExists(activityId: ActivityId$1): boolean;
1112
- getChildren(parentId: ActivityId$1): ActivityId$1[];
1113
- hasChildren(parentId: ActivityId$1): boolean;
1114
- getParent(activityId: ActivityId$1): CoreActivity | null;
1115
- getParentId(activityId: ActivityId$1): ActivityId$1 | null;
1116
- getRootIds(): ReadonlyArray<ActivityId$1>;
1117
- isChildOf(childId: ActivityId$1, parentId: ActivityId$1): boolean;
1118
- getOutgoingLinkIds(activityId: ActivityId$1): ReadonlyArray<LinkId$1>;
1119
- getIncomingLinkIds(activityId: ActivityId$1): ReadonlyArray<LinkId$1>;
1120
- getAllIds(): readonly ActivityId$1[];
1121
- activityCount(): number;
1122
- forEachActivity(visit: (activity: CoreActivity, id: ActivityId$1) => void): void;
1123
- }
1124
- /** READ + WRITE surface over the store. */
1125
- interface ActivityWriter extends ActivityReader {
1126
- setActivityField<Field extends keyof CoreActivity>(activityId: ActivityId$1, field: Field, value: CoreActivity[Field]): void;
1127
- setActivityFieldDynamic(activityId: ActivityId$1, field: string, value: unknown): void;
1128
- /** Bulk write of several fields of one activity in a single getActivity +
1129
- * write-capture note (vs N setActivityField calls). */
1130
- setActivityFields(activityId: ActivityId$1, fields: Partial<CoreActivity>): void;
1131
- addLink(link: LinkSnapshot): void;
1132
- removeLink(linkId: LinkId$1): void;
1133
- setLinkField<Field extends MutableLinkField>(linkId: LinkId$1, field: Field, value: LinkSnapshot[Field]): void;
1134
- setLinkFieldDynamic(linkId: LinkId$1, field: string, value: unknown): void;
1135
- addActivity(activity: CoreActivity): void;
1136
- removeActivity(activityId: ActivityId$1): void;
1137
- }
1138
-
1139
1121
  /**
1140
1122
  * Injected reporting port. The core is UI-agnostic: it cannot `console.*`,
1141
1123
  * show UI, or know about Sentry. When it hits a recoverable data-quality
@@ -1235,20 +1217,8 @@ interface ScheduleCoreInput extends BackendScheduleInput {
1235
1217
  reporter?: ScheduleCoreReporter;
1236
1218
  }
1237
1219
 
1238
- interface PersistedEntityIdentity {
1239
- readonly id: string;
1240
- readonly proplannerId: number;
1241
- }
1242
- interface PersistenceAcknowledgement {
1243
- readonly activities?: ReadonlyArray<PersistedEntityIdentity>;
1244
- readonly links?: ReadonlyArray<PersistedEntityIdentity>;
1245
- }
1246
1220
  declare class ScheduleCore {
1247
1221
  private _status;
1248
- /** True while an async dispatch is suspended inside the write-capture window.
1249
- * A sync facade mutation running in that gap would corrupt the in-flight
1250
- * journal, so sync mutators refuse to run while it is set. */
1251
- private _dispatchInFlight;
1252
1222
  private readonly coreRuntime;
1253
1223
  private readonly _undo;
1254
1224
  private _opQueue;
@@ -1259,7 +1229,7 @@ declare class ScheduleCore {
1259
1229
  get ready(): Promise<void>;
1260
1230
  get criticalPathReady(): Promise<{
1261
1231
  changes: ChangeSet;
1262
- }>;
1232
+ } | null>;
1263
1233
  get status(): ScheduleCoreStatus;
1264
1234
  getSector(): Readonly<SectorMetadata>;
1265
1235
  getActivityView(id: ActivityId): Readonly<CoreActivity> | null;
@@ -1287,51 +1257,7 @@ declare class ScheduleCore {
1287
1257
  isCustomIdInUse(customId: string, currentCustomId?: string | null): boolean;
1288
1258
  getProjectWorkHours(): ProjectWorkHours | null;
1289
1259
  getModifiedLinks(): ReadonlyArray<Readonly<Link>>;
1290
- markLinksPersisted(): void;
1291
1260
  getModifiedActivities(): ReadonlyArray<Readonly<CoreActivity>>;
1292
- markActivitiesPersisted(): void;
1293
- /**
1294
- * Reconciles the backend identities returned by a successful schedule save.
1295
- *
1296
- * This is an application-boundary acknowledgement, not an editable schedule
1297
- * gesture: it does not autoschedule, recompute, emit an undo entry, or invent
1298
- * domain changes. Every assignment is validated before the first mutation so
1299
- * a malformed/partial response cannot leave the core half-reconciled. Once
1300
- * applied, the complete live graph becomes the new save-tracker baseline.
1301
- */
1302
- acknowledgePersistence(acknowledgement: PersistenceAcknowledgement): void;
1303
- applyBaselines(points: readonly BaselinePoint[]): ReadonlyArray<Readonly<CoreActivity>>;
1304
- /**
1305
- * Whole-tree ponderator recompute (zeroes, then redistributes 100 within
1306
- * each parent from its children's active baselines, weighted by `criterion`).
1307
- * Returns the activities whose `ponderator` changed, for a prop-only repaint.
1308
- * The base rollup (`applyBaselines`) depends on fresh ponderators, so callers
1309
- * run this before it on a criterion change or baseline save.
1310
- */
1311
- recomputeAllPonderators(criterion: ActivityCreter): ReadonlyArray<Readonly<CoreActivity>>;
1312
- /**
1313
- * Recompute the weighted-progress rollup of every parent, bottom-up.
1314
- * Returns the activities whose `progress` changed, for a prop-only repaint.
1315
- */
1316
- recomputeAllProgressRollup(): ReadonlyArray<Readonly<CoreActivity>>;
1317
- /**
1318
- * Set the project's status criterion (the Baseline↔Actual toggle) and
1319
- * recompute every activity's `status` against it. Stores the criterion so
1320
- * future dispatches keep deriving status with it. Returns the activities
1321
- * whose `status` changed, for a prop-only repaint.
1322
- */
1323
- setStatusCriteria(criteria: StatusCriteria): ReadonlyArray<Readonly<CoreActivity>>;
1324
- allocateActivityId(): ActivityId;
1325
- createActivity(input: Omit<Extract<DispatchAction, {
1326
- kind: 'activity-create';
1327
- }>, 'kind'>): {
1328
- ok: true;
1329
- activity: Readonly<CoreActivity>;
1330
- changes: ChangeSet;
1331
- } | {
1332
- ok: false;
1333
- reason: string;
1334
- };
1335
1261
  private _enqueue;
1336
1262
  dispatch(action: DispatchAction, options?: DispatchOptions): Promise<DispatchResult>;
1337
1263
  private _dispatchInner;
@@ -1350,16 +1276,27 @@ declare class ScheduleCore {
1350
1276
  private _recordScheduleMutation;
1351
1277
  private _startCriticalPathForCurrentRevision;
1352
1278
  private _runCriticalPathAndCapture;
1279
+ /**
1280
+ * Undo/Redo restores the user's historical mutation while retaining current
1281
+ * non-historical truth (for example a refreshed baseline). Re-derive every
1282
+ * value that depends on both so the restored model is immediately coherent.
1283
+ */
1284
+ private _recomputeAfterHistoryRestore;
1353
1285
  undo(): Promise<ChangeSet | null>;
1354
1286
  redo(): Promise<ChangeSet | null>;
1355
- clearHistory(): void;
1356
1287
  canUndo(): boolean;
1357
1288
  canRedo(): boolean;
1289
+ /**
1290
+ * Establishes a new persistence boundary without mutating schedule state.
1291
+ * Completed saves call this synchronously so neither prior undo entries nor
1292
+ * their redo branch can cross the persisted boundary.
1293
+ */
1294
+ clearHistory(): void;
1358
1295
  undoDepth(): number;
1359
1296
  private _resyncCustomIdTrackerFromModel;
1360
1297
  destroy(): void;
1361
1298
  private readonly _initPromise;
1362
- private readonly _criticalPathReady;
1299
+ private _criticalPathReady;
1363
1300
  private readonly _ready;
1364
1301
  private readonly _saveTracker;
1365
1302
  private assertReady;
@@ -1409,25 +1346,6 @@ declare function getActiveBaseline(activity: {
1409
1346
  baselinePoints?: readonly CoreBaselinePoint[];
1410
1347
  } | null | undefined): CoreBaselinePoint | null;
1411
1348
 
1412
- /**
1413
- * Surface this function needs from ScheduleState — kept structural so the
1414
- * function is unit-testable with a plain in-memory adapter.
1415
- */
1416
- interface BaselineApplyAdapter {
1417
- forEachActivity(visit: (a: Record<string, unknown>, id: string) => void): void;
1418
- getActivity(id: string): Record<string, unknown> | null;
1419
- setActivityField(id: string, field: string, value: unknown): void;
1420
- }
1421
- /**
1422
- * Overlay baseline points onto activities, matching `point.activityId`
1423
- * (backend DB id) against `activity.proplannerId`. Writes the full group of
1424
- * points (all versions) onto `baseline_points`; the active one is selected
1425
- * downstream by `getActiveBaseline`. Activities absent from the new set get
1426
- * `baseline_points` reset to `[]`. Returns the ids of activities whose
1427
- * `baseline_points` changed (so the caller can repaint just those).
1428
- */
1429
- declare function applyBaselinePoints(adapter: BaselineApplyAdapter, points: readonly BaselinePoint[], reporter: ScheduleCoreReporter): string[];
1430
-
1431
1349
  interface CalendarLike {
1432
1350
  calculateDuration(start: Date, end: Date): number;
1433
1351
  }
@@ -1458,67 +1376,6 @@ interface ExpectedProgressAdapter {
1458
1376
  */
1459
1377
  declare function computeExpectedProgress(rootIds: readonly string[], now: Date, adapter: ExpectedProgressAdapter, defaultBaseCalendarId?: string | null): string[];
1460
1378
 
1461
- /**
1462
- * Recompute the `ponderator` of EVERY activity in the schedule, in bulk.
1463
- *
1464
- * Faithful port of `goCalculatePonderators` in
1465
- * `react_client/src/views/ganttContainer/gantt/index.js:2008-2038` (the
1466
- * ponderator part — the progress rollup and save are separate concerns the
1467
- * caller wires). Two passes, mirroring the legacy:
1468
- * 1. Zero EVERY activity's ponderator.
1469
- * 2. For each parent (activity with children), redistribute 100 among its
1470
- * children via `recomputePonderatorsForParent` (baseline-only).
1471
- *
1472
- * IMPORTANT — this is the ONLY ponderator recompute the schedule performs.
1473
- * Verified against the legacy (2026-06-04): the masterplan does NOT recompute
1474
- * ponderators on add / delete / move / inline-edit. `goCalculatePonderators`
1475
- * runs ONLY on two events (see index.js:395/443/625):
1476
- * - the project criterion (`activity_creter`) changed
1477
- * (`sectorObject.update_ponderators_masterplan`), or
1478
- * - a baseline was created / saved.
1479
- * Both events otherwise reload the schedule. So there is intentionally NO
1480
- * per-mutation cascade and NO dispatch hook — adding one would diverge from
1481
- * production (a baselined child's siblings stay as the backend computed them
1482
- * until the next of those two events). See
1483
- * [[PONDERATOR_BASELINE_MIGRATION_PLAN]].
1484
- *
1485
- * Order-independent: a project child's weight derives from descendant
1486
- * BASELINES (`getDurationRecursively`), never from other ponderators, so the
1487
- * order parents are visited in does not affect the result.
1488
- */
1489
-
1490
- declare function recomputeAllPonderators(criterion: ActivityCreter, adapter: ActivityWriter): void;
1491
-
1492
- /**
1493
- * Recompute the weighted-progress rollup of EVERY parent in the schedule,
1494
- * bottom-up. `parent.progress = Σ(child.progress × child.ponderator / 100)`.
1495
- *
1496
- * Faithful port of legacy `check_progress` (editing-flow.js:154-197) — the
1497
- * second half of `goCalculatePonderators`. After a ponderator recompute
1498
- * (baseline create/save, see `recomputeAllPonderators`), parent progress is
1499
- * stale w.r.t. the new weights; this repropagates it.
1500
- *
1501
- * PROGRESS-ONLY by design: unlike the dispatch post-processor
1502
- * `recomputeParentFromChildren` (post-processors/parent-bounds.ts), this does NOT
1503
- * touch parent start/end/duration — only `progress`. That keeps it testable
1504
- * in isolation (no calendars/dates needed) and matches what `check_progress`
1505
- * actually did.
1506
- *
1507
- * Order is load-bearing (unlike ponderators, which are order-independent): a
1508
- * grandparent's rollup consumes its children-parents' ALREADY rolled-up
1509
- * progress, so parents are visited deepest-first.
1510
- *
1511
- * Parity rules:
1512
- * - child with no/zero ponderator does not contribute;
1513
- * - a parent whose children contribute nothing keeps its progress frozen;
1514
- * - `progress` is kept a NUMBER but rounded per level to 2 decimals
1515
- * (`roundProgressPerLevel`) — legacy `check_progress` recurses on
1516
- * `toFixed(2)`, so each ancestor consumes its children's 2-decimal value
1517
- * (MORNING_QUEUE.md — JUN-02).
1518
- */
1519
-
1520
- declare function recomputeAllProgressRollup(adapter: ActivityWriter): void;
1521
-
1522
1379
  type StaticActivityDefaults = Omit<CoreActivity, 'id' | 'parentId' | 'name' | 'startDate' | 'endDate' | 'durationHours' | 'calendarId' | 'uniqueCorrelativeId'>;
1523
1380
  declare const NEW_ACTIVITY_DEFAULTS: Readonly<StaticActivityDefaults>;
1524
1381
 
@@ -1568,9 +1425,9 @@ declare function yieldToBrowser(): Promise<void>;
1568
1425
  * Does this dispatch recompute the critical path? The single authority for the
1569
1426
  * question, shared by the dispatch gate (`resolveDerivedPasses`) and the
1570
1427
  * bridge, which reads it to defer the CP out of the paint. Mirrors legacy: the
1571
- * CP re-derives on any scheduling change, and is left STALE for prop-only
1572
- * intents, the structural reparents (indent/outdent), and edits that touch only
1573
- * non-scheduling columns.
1428
+ * CP re-derives on every scheduling change. Prop-only/administrative intents
1429
+ * and edits that touch only non-scheduling columns leave the current CP
1430
+ * revision intact; structural reparents are never exempt.
1574
1431
  */
1575
1432
  declare function willRunCriticalPath(action: DispatchAction): boolean;
1576
1433
 
@@ -1673,6 +1530,10 @@ declare const DEFAULT_HOURS_PER_DAY = 8;
1673
1530
 
1674
1531
  type DispatchActionKind = DispatchAction['kind'];
1675
1532
  declare const DISPATCH_ACTION_KIND: {
1533
+ readonly PERSISTENCE_ACKNOWLEDGE: "persistence-acknowledge";
1534
+ readonly BASELINE_APPLY: "baseline-apply";
1535
+ readonly PONDERATOR_CRITERION_SET: "ponderator-criterion-set";
1536
+ readonly STATUS_CRITERIA_SET: "status-criteria-set";
1676
1537
  readonly INLINE_EDIT: "inline-edit";
1677
1538
  readonly DATES_BATCH: "dates-batch";
1678
1539
  readonly BULK_EDIT: "bulk-edit";
@@ -1767,4 +1628,4 @@ declare const DISPATCH_TRACK_EVENT: {
1767
1628
  };
1768
1629
  type DispatchTrackEvent = (typeof DISPATCH_TRACK_EVENT)[keyof typeof DISPATCH_TRACK_EVENT];
1769
1630
 
1770
- export { ACTIVITY_TYPE, type ActivityCreter, type ActivityId, type ActivityType, type BackendActivityInput, type BackendCalendarInput, type BackendLinkInput, type BackendScheduleInput, type BackendSectorInput, type BaselinePoint, type BaselineVersion, CALENDAR_UNIT, COLUMN, CONSTRAINT_TYPE, CONSTRAINT_TYPE_TO_LABEL, CREATION_KIND, type Calendar, type CalendarId, type CalendarUnit, type CalendarWorktime, type ChangeSet, type ColumnName, type ConstraintType, type ConstraintWarning, type CoreActivity, type CreationKind, DEFAULT_HOURS_PER_DAY, DISPATCH_ACTION_KIND, DISPATCH_ACTION_KINDS, DISPATCH_TRACK_EVENT, type DispatchAction, type DispatchActionKind, type DispatchOptions, type DispatchRejectReason, type DispatchResult, type DispatchTrackEvent, type EntityChange, LINK_CODE_TO_TYPE, LINK_TYPE, LINK_TYPE_CODE, type Link, type LinkId, type LinkType, type LinkTypeCode, type LinksBatchOperation, NEW_ACTIVITY_DEFAULTS, type ParsedInput, type PastedActivityInput, type PastedLinkInput, type PendingRequest, type PersistedEntityIdentity, type PersistenceAcknowledgement, REJECTION_REASON, ROOT_PARENT_ID, ScheduleCore, type ScheduleCoreInput, type ScheduleCoreReporter, type ScheduleCoreStatus, type ScheduleEffect, type SectorMetadata, type StatusCriteria, type TrackingEvent, WORK_TIME_DIRECTION, type WorkTimeDirection, applyBaselinePoints, checkNoUpdatedLinks, computeExpectedProgress, expectedProgressFromBaseline, getActiveBaseline, getUnsavedActivities, isRootParent, normalizeParentKey, parseFromBackend, recomputeAllPonderators, recomputeAllProgressRollup, willRunCriticalPath, yieldToBrowser };
1631
+ export { ACTIVITY_TYPE, type ActivityCreter, type ActivityId, type ActivityType, type BackendActivityInput, type BackendCalendarInput, type BackendLinkInput, type BackendScheduleInput, type BackendSectorInput, type BaselinePoint, type BaselineVersion, CALENDAR_UNIT, COLUMN, CONSTRAINT_TYPE, CONSTRAINT_TYPE_TO_LABEL, CREATION_KIND, type Calendar, type CalendarId, type CalendarUnit, type CalendarWorktime, type ChangeSet, type ColumnName, type ConstraintType, type ConstraintWarning, type CoreActivity, type CreationKind, DEFAULT_HOURS_PER_DAY, DISPATCH_ACTION_KIND, DISPATCH_ACTION_KINDS, DISPATCH_TRACK_EVENT, type DispatchAction, type DispatchActionKind, type DispatchOptions, type DispatchRejectReason, type DispatchResult, type DispatchTrackEvent, type EntityChange, LINK_CODE_TO_TYPE, LINK_TYPE, LINK_TYPE_CODE, type Link, type LinkId, type LinkType, type LinkTypeCode, type LinksBatchOperation, NEW_ACTIVITY_DEFAULTS, type ParsedInput, type PastedActivityInput, type PastedLinkInput, type PendingRequest, type PersistedEntityIdentity, REJECTION_REASON, ROOT_PARENT_ID, ScheduleCore, type ScheduleCoreInput, type ScheduleCoreReporter, type ScheduleCoreStatus, type ScheduleEffect, type SectorMetadata, type StatusCriteria, type TrackingEvent, WORK_TIME_DIRECTION, type WorkTimeDirection, checkNoUpdatedLinks, computeExpectedProgress, expectedProgressFromBaseline, getActiveBaseline, getUnsavedActivities, isRootParent, normalizeParentKey, parseFromBackend, willRunCriticalPath, yieldToBrowser };