@burdenoff/microfe-technospam 2026.1031.5 → 2026.1031.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/generated/wspace-types.d.ts +1100 -147
  2. package/dist/generated/wspace-types.d.ts.map +1 -1
  3. package/dist/stories/fixtures/technospamFixtures.d.ts.map +1 -1
  4. package/dist/technospam/api/canonicalLearning.d.ts +53 -0
  5. package/dist/technospam/api/canonicalLearning.d.ts.map +1 -0
  6. package/dist/technospam/api/canonicalLearning.js +57 -0
  7. package/dist/technospam/api/canonicalLearning.js.map +1 -0
  8. package/dist/technospam/api/technospamApi.d.ts +448 -16
  9. package/dist/technospam/api/technospamApi.d.ts.map +1 -1
  10. package/dist/technospam/api/technospamApi.js +417 -287
  11. package/dist/technospam/api/technospamApi.js.map +1 -1
  12. package/dist/technospam/components/StatusBadge.d.ts.map +1 -1
  13. package/dist/technospam/components/StatusBadge.js +2 -0
  14. package/dist/technospam/components/StatusBadge.js.map +1 -1
  15. package/dist/technospam/components/admin/EnterpriseIntegrationsTab.d.ts +6 -0
  16. package/dist/technospam/components/admin/EnterpriseIntegrationsTab.d.ts.map +1 -0
  17. package/dist/technospam/components/admin/EnterpriseIntegrationsTab.js +256 -0
  18. package/dist/technospam/components/admin/EnterpriseIntegrationsTab.js.map +1 -0
  19. package/dist/technospam/lib/enterprise.d.ts +21 -0
  20. package/dist/technospam/lib/enterprise.d.ts.map +1 -0
  21. package/dist/technospam/lib/enterprise.js +36 -0
  22. package/dist/technospam/lib/enterprise.js.map +1 -0
  23. package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts.map +1 -1
  24. package/dist/technospam/pages/AdminAdminDashboardPagePage.js +206 -201
  25. package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -1
  26. package/dist/technospam/pages/ApplicationsPortfolioPagePage.d.ts.map +1 -1
  27. package/dist/technospam/pages/ApplicationsPortfolioPagePage.js +26 -26
  28. package/dist/technospam/pages/ApplicationsPortfolioPagePage.js.map +1 -1
  29. package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts.map +1 -1
  30. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +196 -192
  31. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -1
  32. package/dist/technospam/pages/CoursesLessonPlayerPagePage.d.ts.map +1 -1
  33. package/dist/technospam/pages/CoursesLessonPlayerPagePage.js +125 -121
  34. package/dist/technospam/pages/CoursesLessonPlayerPagePage.js.map +1 -1
  35. package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts.map +1 -1
  36. package/dist/technospam/pages/CoursesMyLearningPagePage.js +95 -95
  37. package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -1
  38. package/dist/technospam/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  39. package/dist/technospam/pages/DashboardDashboardPagePage.js +30 -30
  40. package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -1
  41. package/package.json +1 -1
@@ -209,10 +209,7 @@ export type AcceptMtwReuseReservationInput = {
209
209
  idempotencyKey: Scalars['String']['input'];
210
210
  proposalId: Scalars['ID']['input'];
211
211
  };
212
- /**
213
- * The ids a resource shared with people, groups or projects can be granted to, for one person in one
214
- * workspace.
215
- */
212
+ /** The ids a resource shared with people, groups or projects can be granted to, for one person in one workspace. */
216
213
  export type AccessPrincipals = {
217
214
  __typename?: 'AccessPrincipals';
218
215
  actorId: Scalars['String']['output'];
@@ -228,10 +225,7 @@ export type AccessPrincipalsInput = {
228
225
  /** Opaque actor ID of the person, never the calling service */
229
226
  actorId: Scalars['String']['input'];
230
227
  actorType: ActorType;
231
- /**
232
- * Resource type the calling service shares (e.g. "integration-connection", "workflow"); decides
233
- * administersResourceType
234
- */
228
+ /** Resource type the calling service shares (e.g. "integration-connection", "workflow"); decides administersResourceType */
235
229
  resourceType: Scalars['String']['input'];
236
230
  };
237
231
  export type AccessShareInput = {
@@ -6879,6 +6873,30 @@ export type BigConsoleSetWidgetTypeStatusInput = {
6879
6873
  /** Workspace used for RBAC scope resolution. */
6880
6874
  workspaceId: Scalars['ID']['input'];
6881
6875
  };
6876
+ /** The calling profile's BigConsole preferences in the request workspace. Settings are personal: they belong to the calling actor inside the workspace of the request, are never shared with the team, and follow the user across devices and browsers. When nothing has been saved yet the defaults are returned with `persisted: false`. */
6877
+ export type BigConsoleSettings = {
6878
+ __typename?: 'BigConsoleSettings';
6879
+ /** Whether transition animations and effects are enabled */
6880
+ animationsEnabled: Scalars['Boolean']['output'];
6881
+ /** Whether new data sinks enable caching by default */
6882
+ cacheEnabled: Scalars['Boolean']['output'];
6883
+ /** Default cache TTL for new data sinks, in seconds (0-86400) */
6884
+ cacheTTLSeconds: Scalars['Int']['output'];
6885
+ /** Whether dashboards use reduced padding and spacing */
6886
+ compactMode: Scalars['Boolean']['output'];
6887
+ /** Default number of grid columns for new dashboard pages (4-24) */
6888
+ defaultGridColumns: Scalars['Int']['output'];
6889
+ /** Default auto-refresh interval for new widgets, in seconds (0 disables it, max 86400) */
6890
+ defaultRefreshInterval: Scalars['Int']['output'];
6891
+ /** Default height, in grid units, for new widgets (1-12) */
6892
+ defaultWidgetHeight: Scalars['Int']['output'];
6893
+ /** Whether these values were saved by the caller. False means the caller has never saved settings in this workspace and these are the defaults. */
6894
+ persisted: Scalars['Boolean']['output'];
6895
+ /** Whether widgets are drawn with borders */
6896
+ showWidgetBorders: Scalars['Boolean']['output'];
6897
+ /** When the caller last saved their settings; null when never saved */
6898
+ updatedAt?: Maybe<Scalars['DateTime']['output']>;
6899
+ };
6882
6900
  /** Input for sharing a dashboard */
6883
6901
  export type BigConsoleShareDashboardInput = {
6884
6902
  /** Dashboard ID to share */
@@ -7108,6 +7126,25 @@ export type BigConsoleUpdateGlobalFilterInput = {
7108
7126
  /** Display order */
7109
7127
  order?: InputMaybe<Scalars['Int']['input']>;
7110
7128
  };
7129
+ /** Changes to the caller's BigConsole settings. Omitted or null fields keep their current value (or the default when nothing was saved yet). Out-of-range values are rejected with BAD_USER_INPUT and nothing is written. */
7130
+ export type BigConsoleUpdateSettingsInput = {
7131
+ /** Whether transition animations and effects are enabled */
7132
+ animationsEnabled?: InputMaybe<Scalars['Boolean']['input']>;
7133
+ /** Whether new data sinks enable caching by default */
7134
+ cacheEnabled?: InputMaybe<Scalars['Boolean']['input']>;
7135
+ /** Default cache TTL for new data sinks, in seconds (0-86400) */
7136
+ cacheTTLSeconds?: InputMaybe<Scalars['Int']['input']>;
7137
+ /** Whether dashboards use reduced padding and spacing */
7138
+ compactMode?: InputMaybe<Scalars['Boolean']['input']>;
7139
+ /** Default number of grid columns for new dashboard pages (4-24) */
7140
+ defaultGridColumns?: InputMaybe<Scalars['Int']['input']>;
7141
+ /** Default auto-refresh interval for new widgets, in seconds (0-86400) */
7142
+ defaultRefreshInterval?: InputMaybe<Scalars['Int']['input']>;
7143
+ /** Default height, in grid units, for new widgets (1-12) */
7144
+ defaultWidgetHeight?: InputMaybe<Scalars['Int']['input']>;
7145
+ /** Whether widgets are drawn with borders */
7146
+ showWidgetBorders?: InputMaybe<Scalars['Boolean']['input']>;
7147
+ };
7111
7148
  /** Input for updating a widget action */
7112
7149
  export type BigConsoleUpdateWidgetActionInput = {
7113
7150
  /** Confirmation dialog configuration */
@@ -9975,6 +10012,10 @@ export type BuiCertificate = {
9975
10012
  /** BOFF-3134: the source product's own id for this certificate (opaque). */
9976
10013
  sourceId?: Maybe<Scalars['ID']['output']>;
9977
10014
  status: BuiCertificateStatus;
10015
+ /** The Technospam certificate this canonical certificate was written from. */
10016
+ technospamCertificate?: Maybe<TecCertificate>;
10017
+ /** Why Technospam revoked the certificate, when it did. */
10018
+ technospamRevokeReason?: Maybe<Scalars['String']['output']>;
9978
10019
  updatedAt: Scalars['DateTime']['output'];
9979
10020
  /** BOFF-4431: opaque code for the PUBLIC, unauthenticated verification page (`/verify/buildmyiq/{verificationCode}`) — share this, not the internal id. Null for certificates issued before this field existed. */
9980
10021
  verificationCode?: Maybe<Scalars['String']['output']>;
@@ -10111,6 +10152,12 @@ export type BuiCourse = {
10111
10152
  status: BuiCourseStatus;
10112
10153
  summary?: Maybe<Scalars['String']['output']>;
10113
10154
  tags: Array<Scalars['String']['output']>;
10155
+ /** The Technospam course this canonical course was written from. */
10156
+ technospamCourse?: Maybe<TecCourse>;
10157
+ /** True when the course is premium-only and the calling workspace has no paid TechnoSpam plan. */
10158
+ technospamIsLocked?: Maybe<Scalars['Boolean']['output']>;
10159
+ /** True when the course's lesson bodies need a paid TechnoSpam plan. */
10160
+ technospamIsPremiumOnly?: Maybe<Scalars['Boolean']['output']>;
10114
10161
  title: Scalars['String']['output'];
10115
10162
  updatedAt: Scalars['DateTime']['output'];
10116
10163
  workspaceId: Scalars['ID']['output'];
@@ -10486,6 +10533,12 @@ export type BuiEnrollment = {
10486
10533
  sourceId?: Maybe<Scalars['ID']['output']>;
10487
10534
  startedAt?: Maybe<Scalars['DateTime']['output']>;
10488
10535
  status: BuiEnrollmentStatus;
10536
+ /** Lessons finished in this enrollment, with how each was completed (manual, quiz, code). */
10537
+ technospamCompletions?: Maybe<Array<TecLessonCompletion>>;
10538
+ /** The Technospam enrollment this canonical enrollment was written from. */
10539
+ technospamEnrollment?: Maybe<TecEnrollment>;
10540
+ /** The first Technospam lesson not yet completed; null when every lesson is done. */
10541
+ technospamNextLessonId?: Maybe<Scalars['ID']['output']>;
10489
10542
  updatedAt: Scalars['DateTime']['output'];
10490
10543
  workspaceId: Scalars['ID']['output'];
10491
10544
  };
@@ -10508,6 +10561,43 @@ export declare enum BuiEnrollmentStatus {
10508
10561
  export declare enum BuiExternalSource {
10509
10562
  Technospam = "TECHNOSPAM"
10510
10563
  }
10564
+ /** BOFF-10480: which kind of mirrored record a parity read asks for. */
10565
+ export declare enum BuiExternalSyncKind {
10566
+ Certificate = "CERTIFICATE",
10567
+ Course = "COURSE",
10568
+ Enrollment = "ENROLLMENT",
10569
+ Lesson = "LESSON",
10570
+ LessonProgress = "LESSON_PROGRESS"
10571
+ }
10572
+ /** BOFF-10480: the comparable canonical state of one mirrored record, returned to the source product so it can report (and re-sync) any record whose canonical copy drifted. Fields that do not apply to the requested kind are null. `status` carries the kind's own enum value as text. */
10573
+ export type BuiExternalSyncRecord = {
10574
+ __typename?: 'BuiExternalSyncRecord';
10575
+ /** The canonical row's id in Buildmyiq. */
10576
+ canonicalId: Scalars['ID']['output'];
10577
+ /** SHA-256 (hex) of the canonical lesson body; null when no body is held. */
10578
+ contentSha256?: Maybe<Scalars['String']['output']>;
10579
+ /** True when the canonical row is soft-deleted (archived). */
10580
+ deleted: Scalars['Boolean']['output'];
10581
+ isPreview?: Maybe<Scalars['Boolean']['output']>;
10582
+ learnerId?: Maybe<Scalars['ID']['output']>;
10583
+ mediaFileId?: Maybe<Scalars['ID']['output']>;
10584
+ position?: Maybe<Scalars['Int']['output']>;
10585
+ progressPct?: Maybe<Scalars['Int']['output']>;
10586
+ serial?: Maybe<Scalars['String']['output']>;
10587
+ /** The source product's own id of the record. */
10588
+ sourceId: Scalars['ID']['output'];
10589
+ status?: Maybe<Scalars['String']['output']>;
10590
+ title?: Maybe<Scalars['String']['output']>;
10591
+ updatedAt: Scalars['DateTime']['output'];
10592
+ /** Course level (COURSE) or lesson type (LESSON). */
10593
+ variant?: Maybe<Scalars['String']['output']>;
10594
+ };
10595
+ /** BOFF-10480: one source product's batch of record ids to compare against the canonical LMS. At most 200 ids per call. */
10596
+ export type BuiExternalSyncRecordsInput = {
10597
+ kind: BuiExternalSyncKind;
10598
+ source: BuiExternalSource;
10599
+ sourceIds: Array<Scalars['ID']['input']>;
10600
+ };
10511
10601
  export type BuiGradeSubmissionInput = {
10512
10602
  feedback?: InputMaybe<Scalars['String']['input']>;
10513
10603
  passed?: InputMaybe<Scalars['Boolean']['input']>;
@@ -10555,6 +10645,28 @@ export type BuiLesson = {
10555
10645
  media?: Maybe<File>;
10556
10646
  moduleId?: Maybe<Scalars['ID']['output']>;
10557
10647
  position: Scalars['Int']['output'];
10648
+ /** BOFF-10464: the product this lesson was mirrored from. Null for lessons authored natively in Buildmyiq. */
10649
+ source?: Maybe<BuiExternalSource>;
10650
+ /** BOFF-10464: the source product's own id for this lesson (opaque). */
10651
+ sourceId?: Maybe<Scalars['ID']['output']>;
10652
+ /** True when the calling learner has completed this lesson in Technospam. */
10653
+ technospamCompletedByMe?: Maybe<Scalars['Boolean']['output']>;
10654
+ /** The lesson body as Technospam holds it, gated by the TechnoSpam plan. Use this for premium-only lessons: their body is not stored in Buildmyiq until Buildmyiq has a product-entitlement-aware content gate. Null when locked. */
10655
+ technospamContent?: Maybe<Scalars['String']['output']>;
10656
+ /** INTERACTIVE lessons: the output a correct program prints. Null when locked. */
10657
+ technospamExpectedOutput?: Maybe<Scalars['String']['output']>;
10658
+ /** TechnoSpam free-tier lock for the calling workspace (see TecLesson.isLocked). */
10659
+ technospamIsLocked?: Maybe<Scalars['Boolean']['output']>;
10660
+ /** INTERACTIVE lessons: language slug the runnable workspace executes. */
10661
+ technospamLanguage?: Maybe<Scalars['String']['output']>;
10662
+ /** The Technospam lesson this canonical lesson was written from. */
10663
+ technospamLesson?: Maybe<TecLesson>;
10664
+ /** QUIZ lessons: the questions without the answer key. Empty when locked. */
10665
+ technospamQuizQuestions?: Maybe<Array<TecQuizQuestion>>;
10666
+ /** INTERACTIVE lessons: default stdin for a run. Null when locked. */
10667
+ technospamSampleInput?: Maybe<Scalars['String']['output']>;
10668
+ /** INTERACTIVE lessons: code pre-filled in the editor. Null when locked. */
10669
+ technospamStarterCode?: Maybe<Scalars['String']['output']>;
10558
10670
  title: Scalars['String']['output'];
10559
10671
  type: BuiLessonType;
10560
10672
  updatedAt: Scalars['DateTime']['output'];
@@ -10573,6 +10685,10 @@ export type BuiLessonProgress = {
10573
10685
  id: Scalars['ID']['output'];
10574
10686
  lessonId: Scalars['ID']['output'];
10575
10687
  secondsSpent: Scalars['Int']['output'];
10688
+ /** BOFF-10464: the product this progress row was mirrored from. Null for progress recorded natively in Buildmyiq. */
10689
+ source?: Maybe<BuiExternalSource>;
10690
+ /** BOFF-10464: the source product's own id for this progress row (opaque). */
10691
+ sourceId?: Maybe<Scalars['ID']['output']>;
10576
10692
  status: BuiProgressStatus;
10577
10693
  updatedAt: Scalars['DateTime']['output'];
10578
10694
  workspaceId: Scalars['ID']['output'];
@@ -11125,6 +11241,41 @@ export type BuiSyncExternalEnrollmentInput = {
11125
11241
  startedAt?: InputMaybe<Scalars['DateTime']['input']>;
11126
11242
  status: BuiEnrollmentStatus;
11127
11243
  };
11244
+ /** BOFF-10464: a source product's lesson. Only the canonical lesson fields are mirrored; product-specific lesson data (runnable-code metadata, quiz answer keys, entitlement lock state) stays with the source product. */
11245
+ export type BuiSyncExternalLessonInput = {
11246
+ /** Lesson body. The source sends null when it must not be exposed outside the source product (for example a premium-only lesson body). */
11247
+ content?: InputMaybe<Scalars['String']['input']>;
11248
+ /** The source product's id of the lesson's course (synced first). */
11249
+ courseSourceId: Scalars['ID']['input'];
11250
+ /** Set when the source soft-deleted the lesson. */
11251
+ deletedAt?: InputMaybe<Scalars['DateTime']['input']>;
11252
+ durationMin?: InputMaybe<Scalars['Int']['input']>;
11253
+ /** Free trailer lesson: readable without an enrollment in a published course. */
11254
+ isPreview: Scalars['Boolean']['input'];
11255
+ /** wspace-files-svc File id of the lesson's primary media asset. */
11256
+ mediaFileId?: InputMaybe<Scalars['ID']['input']>;
11257
+ onBehalfOf: Scalars['ID']['input'];
11258
+ position: Scalars['Int']['input'];
11259
+ source: BuiExternalSource;
11260
+ /** The source product's own lesson id. */
11261
+ sourceId: Scalars['ID']['input'];
11262
+ title: Scalars['String']['input'];
11263
+ type: BuiLessonType;
11264
+ };
11265
+ /** BOFF-10464: one lesson a learner finished inside an enrollment at the source. */
11266
+ export type BuiSyncExternalLessonProgressInput = {
11267
+ completedAt?: InputMaybe<Scalars['DateTime']['input']>;
11268
+ /** The source product's id of the enrollment (synced first). */
11269
+ enrollmentSourceId: Scalars['ID']['input'];
11270
+ /** The source product's id of the lesson (synced first). */
11271
+ lessonSourceId: Scalars['ID']['input'];
11272
+ onBehalfOf: Scalars['ID']['input'];
11273
+ secondsSpent?: InputMaybe<Scalars['Int']['input']>;
11274
+ source: BuiExternalSource;
11275
+ /** The source product's own progress (lesson completion) id. */
11276
+ sourceId: Scalars['ID']['input'];
11277
+ status: BuiProgressStatus;
11278
+ };
11128
11279
  export declare enum BuiTutorAdaptiveLevel {
11129
11280
  Advanced = "ADVANCED",
11130
11281
  OnTrack = "ON_TRACK",
@@ -20828,24 +20979,12 @@ export type CreateRoleInput = {
20828
20979
  name: Scalars['String']['input'];
20829
20980
  parentId?: InputMaybe<Scalars['ID']['input']>;
20830
20981
  priority?: InputMaybe<Scalars['Int']['input']>;
20831
- /**
20832
- * Product this role belongs to (PlatformProduct.slug). Product shells must pass
20833
- * their product slug when creating custom roles. Omit/null is reserved for
20834
- * cross-product platform roles created from the admin app.
20835
- */
20982
+ /** Product this role belongs to (PlatformProduct.slug). Product shells must pass their product slug when creating custom roles. Omit/null is reserved for cross-product platform roles created from the admin app. */
20836
20983
  productSlug?: InputMaybe<Scalars['String']['input']>;
20837
20984
  scopeId: Scalars['String']['input'];
20838
20985
  scopeType?: InputMaybe<Scalars['String']['input']>;
20839
20986
  };
20840
- /**
20841
- * Input for creating a role permission override.
20842
- *
20843
- * The override's scope is inherited from the role's own scope (role.scopeId);
20844
- * clients no longer pass scopeId. This prevents creating cross-scope overrides
20845
- * where the override and the role live in different workspaces.
20846
- *
20847
- * Overrides cannot be created on system templates (role.scopeId='system').
20848
- */
20987
+ /** Input for creating a role permission override. The override's scope is inherited from the role's own scope (role.scopeId); clients no longer pass scopeId. This prevents creating cross-scope overrides where the override and the role live in different workspaces. Overrides cannot be created on system templates (role.scopeId='system'). */
20849
20988
  export type CreateRolePermissionOverrideInput = {
20850
20989
  action: Scalars['String']['input'];
20851
20990
  expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
@@ -25476,16 +25615,9 @@ export type EffectivePermissions = {
25476
25615
  actorId: Scalars['String']['output'];
25477
25616
  /** Cache key for debugging and invalidation */
25478
25617
  cacheKey?: Maybe<Scalars['String']['output']>;
25479
- /**
25480
- * When this permission set should be considered stale.
25481
- * Frontend should refresh after this time.
25482
- */
25618
+ /** When this permission set should be considered stale. Frontend should refresh after this time. */
25483
25619
  expiresAt: Scalars['DateTime']['output'];
25484
- /**
25485
- * Flat permission strings for easy frontend matching.
25486
- * Format: "{resourceType}:{action}" e.g., ["project:read", "project:write", "task:*"]
25487
- * Includes wildcards for ADMIN level (e.g., "project:*")
25488
- */
25620
+ /** Flat permission strings for easy frontend matching. Format: "{resourceType}:{action}" e.g., ["project:read", "project:write", "task:*"] Includes wildcards for ADMIN level (e.g., "project:*") */
25489
25621
  permissionStrings: Array<Scalars['String']['output']>;
25490
25622
  /** Resource types and their effective levels */
25491
25623
  permissions: Array<EffectiveResourcePermission>;
@@ -27670,10 +27802,18 @@ export type ExportTemplateEdge = {
27670
27802
  node: ExportTemplate;
27671
27803
  };
27672
27804
  export type ExportTimeCampusEntitiesInput = {
27805
+ /** Inclusive upper bound on the record date, for entity types that support it. */
27806
+ dateRangeEnd?: InputMaybe<Scalars['DateTime']['input']>;
27807
+ /** Inclusive lower bound on the record date, for entity types that support it. */
27808
+ dateRangeStart?: InputMaybe<Scalars['DateTime']['input']>;
27809
+ /** TimeCampus entity types to export, e.g. `timecampus_time_entries`. */
27673
27810
  entityTypes: Array<Scalars['String']['input']>;
27674
27811
  format?: TimeCampusExportFormat;
27675
27812
  includeMetadata?: InputMaybe<Scalars['Boolean']['input']>;
27676
- workspaceId: Scalars['ID']['input'];
27813
+ /** Human-readable job name shown in export history (max 120 characters). */
27814
+ name?: InputMaybe<Scalars['String']['input']>;
27815
+ /** Ignored. The workspace always comes from the verified request context; the field stays only so existing callers keep validating. */
27816
+ workspaceId?: InputMaybe<Scalars['ID']['input']>;
27677
27817
  };
27678
27818
  export type ExportTimeCampusUserDataInput = {
27679
27819
  entityTypes: Array<Scalars['String']['input']>;
@@ -54926,6 +55066,10 @@ export type Mutation = {
54926
55066
  buiSyncExternalCourse: BuiCourse;
54927
55067
  /** Service-only (BOFF-3134): upsert the canonical enrollment mirroring a source product's enrollment. The course must have been synced first. */
54928
55068
  buiSyncExternalEnrollment: BuiEnrollment;
55069
+ /** Service-only (BOFF-10464): upsert the canonical lesson mirroring a source product's lesson. The course must have been synced first. */
55070
+ buiSyncExternalLesson: BuiLesson;
55071
+ /** Service-only (BOFF-10464): upsert the canonical lesson progress mirroring a source product's lesson completion. The enrollment and the lesson must have been synced first. */
55072
+ buiSyncExternalLessonProgress: BuiLessonProgress;
54929
55073
  /** Real AGS score-publish for one graded submission to the LMS gradebook via the given resource link's line item. Never re-grades — the submission must already be graded (`buiGradeSubmission`/`buiAutoScoreSubmission`). */
54930
55074
  buiSyncLtiGrade: BuiLtiGradeSync;
54931
55075
  /** Names and Role Provisioning Services roster sync: fetches the LMS course roster for this LTI placement and upserts `BuiLtiContextMembership` rows. */
@@ -55279,6 +55423,10 @@ export type Mutation = {
55279
55423
  /** Compile a docs site (creates a new revision and starts async build) */
55280
55424
  compileDocsSite: VibecontrolsDocsRevision;
55281
55425
  completeActionItem: MeetingActionItem;
55426
+ /** Complete an activity that waits for an asynchronous completion, with the task token it handed out. */
55427
+ completeActivityAsync: Scalars['Boolean']['output'];
55428
+ /** Complete, by its id, an activity that waits for an asynchronous completion. */
55429
+ completeActivityById: Scalars['Boolean']['output'];
55282
55430
  /** BOFF-4388 — moves a CHECKED_IN booking to COMPLETED. BOFF-10194 — host of the listing only; operators use operateGgnomadBooking. */
55283
55431
  completeGgnomadBooking: GgnomadBooking;
55284
55432
  completeHealthyBowlGardenCareTask: GardenCareTask;
@@ -55489,6 +55637,8 @@ export type Mutation = {
55489
55637
  createAction: Action;
55490
55638
  createActionItem: MeetingActionItem;
55491
55639
  createActionShareLink: ShareGrant;
55640
+ /** Create an activity pause rule (at most 100 per workspace). Needs fluidgrids.run-control. */
55641
+ createActivityPauseRule: WorkflowActivityPauseRule;
55492
55642
  /** Create an agent definition and its platform identity. */
55493
55643
  createAgentDefinition: AgentDefinition;
55494
55644
  /** BOFF-4400 — deliberately unmetered, mirroring `createBotlitAgent`: Agents are internal workers, reusable across many Apps within a workspace, and are not the customer-facing unit the free/paid tiers price. `botlit.bots.count` meters the App (see `createBotApp` and `createAppFromTemplate`); adding a second `@usage` here would double-charge a single logical bot that fans out to N internal agents. Note the asymmetry with `createAppFromTemplate` above is intentional — that one mints an App, this one mints an Agent. If this changes, update `botlit-billing-seed.ts`, `createBotlitAgent` and the pricing page together with the `@usage` directive added here. */
@@ -55988,10 +56138,7 @@ export type Mutation = {
55988
56138
  createVibecontrolsScorecardTemplate: VibecontrolsScorecardTemplate;
55989
56139
  /** Create a new assignable tag (inline creation from a picker) */
55990
56140
  createVibecontrolsTag: AvailableTag;
55991
- /**
55992
- * Create a visibility rule for a resource.
55993
- * Auto-registers the resource if not already registered.
55994
- */
56141
+ /** Create a visibility rule for a resource. Auto-registers the resource if not already registered. */
55995
56142
  createVisibilityRule: VisibilityRule;
55996
56143
  createVocabulary: TagVocabulary;
55997
56144
  createWarehouse: MtwWarehouse;
@@ -56017,6 +56164,14 @@ export type Mutation = {
56017
56164
  createWorkflowSandbox: Sandbox;
56018
56165
  /** Create a new scheduled job */
56019
56166
  createWorkflowScheduledJob: ScheduledJobResponse;
56167
+ /** Save a new test case on a workflow (at most 50 per workflow). */
56168
+ createWorkflowTestCase: WorkflowTestCase;
56169
+ /**
56170
+ * Save a finished run as a test case: its trigger input, and a connection mock
56171
+ * for every non-internal node that completed, holding the output it produced.
56172
+ * The workflow's redacted fields are stored redacted. Private runs cannot be saved.
56173
+ */
56174
+ createWorkflowTestCaseFromRun: WorkflowTestCase;
56020
56175
  createWorkflowVariable: WorkflowVariableResponse;
56021
56176
  createWorkflowVersion: CreateWorkflowVersionResponse;
56022
56177
  /** Create a new workspace. Tenant ID is read from gateway context (x-tenant-id header). Owner defaults to authenticated actor (x-actor-id header). */
@@ -56085,6 +56240,8 @@ export type Mutation = {
56085
56240
  deleteActionItem: Scalars['Boolean']['output'];
56086
56241
  /** Delete an action policy. Needs workflow publish rights. */
56087
56242
  deleteActionPolicy: Scalars['Boolean']['output'];
56243
+ /** Delete an activity pause rule; everything it paused is unpaused. */
56244
+ deleteActivityPauseRule: Scalars['Boolean']['output'];
56088
56245
  /** Delete an agent definition, retire its identity and withdraw every grant. */
56089
56246
  deleteAgentDefinition: Scalars['Boolean']['output'];
56090
56247
  deleteAgentInstructionFile: Scalars['Boolean']['output'];
@@ -56499,6 +56656,8 @@ export type Mutation = {
56499
56656
  deleteWorkflowRun: Scalars['Boolean']['output'];
56500
56657
  /** Delete a scheduled job (soft delete) */
56501
56658
  deleteWorkflowScheduledJob: DeleteConfigResponse;
56659
+ /** Delete a test case. Its past runs keep their results. */
56660
+ deleteWorkflowTestCase: Scalars['Boolean']['output'];
56502
56661
  deleteWorkflowVariable: DeleteConfigResponse;
56503
56662
  /** Soft delete a workspace (sets status to DELETED and populates deletedAt). The workspace and its intra-service records remain recoverable during the platform's documented 30-day retention / grace-period. After the retention period a background purge may hard-delete the row and its cascaded records. The workspace_audit_log row for this event is written after the soft delete and is intentionally NOT foreign-keyed to Workspace so it survives eventual purge (see WorkspaceAuditLog's schema doc-comment). */
56504
56663
  deleteWorkspace: Scalars['Boolean']['output'];
@@ -56827,6 +56986,7 @@ export type Mutation = {
56827
56986
  exportSessions: SessionExport;
56828
56987
  /** Export the subject's files-layer data: owned files (with metadata, versions, tags), folders, file-shares granted by the subject. Object storage payloads are listed by S3 key but not inlined; the privacy-svc orchestrator includes them via signed URLs in the final DSAR bundle. */
56829
56988
  exportSubject: Scalars['JSON']['output'];
56989
+ /** Start a server-side export of TimeCampus data. The job runs asynchronously in wspace-export-svc; poll `timeCampusExportJob(id)` until it reaches a terminal status, then download the archive from `downloadUrl`. */
56830
56990
  exportTimeCampusEntities: TimeCampusExportJob;
56831
56991
  exportTimeCampusUserData: TimeCampusExportJob;
56832
56992
  /** Export audit logs matching the filter as CSV or JSON */
@@ -56842,6 +57002,10 @@ export type Mutation = {
56842
57002
  /** Extend the caller's OWN running Ask or Take-action assistant sandbox (any workspace role), capped exactly as extendSandboxTTL is. Another user's sandbox, or one that is not an assistant sandbox, is NOT_FOUND. */
56843
57003
  extendMyAssistantSandboxTTL: Sandbox;
56844
57004
  extendSandboxTTL: Sandbox;
57005
+ /** Fail an activity that waits for an asynchronous completion; its retry policy decides what follows. */
57006
+ failActivityAsync: Scalars['Boolean']['output'];
57007
+ /** Fail, by its id, an activity that waits for an asynchronous completion. */
57008
+ failActivityById: Scalars['Boolean']['output'];
56845
57009
  /**
56846
57010
  * Run one triage pass now (the hourly workflow runs the same pass). Returns
56847
57011
  * skipped with reason not_enabled or flag_off when triage is off.
@@ -56898,6 +57062,8 @@ export type Mutation = {
56898
57062
  ggnomadGenerateTripPlan: GgnomadTripPlanProposal;
56899
57063
  govAddCaseNote: GovCaseNote;
56900
57064
  govAddDocument: GovDocument;
57065
+ /** Self-scoped (Type B): attach a document to the caller's own application. */
57066
+ govAddMyDocument: GovDocument;
56901
57067
  govArchiveAgency: Scalars['Boolean']['output'];
56902
57068
  govArchiveJurisdiction: GovJurisdiction;
56903
57069
  /** Persist a wspace-files-svc File reference onto an issued permit after the client has saved the rendered PDF via the standard Save-to-Files flow. */
@@ -56915,6 +57081,8 @@ export type Mutation = {
56915
57081
  govCreateIndicator: GovIndicator;
56916
57082
  govCreateJurisdiction: GovJurisdiction;
56917
57083
  govCreateJurisdictionEvent: GovJurisdictionEvent;
57084
+ /** Self-scoped: a citizen files an application for a PUBLISHED service. The applicant is always the authenticated actor. */
57085
+ govCreateMyApplication: GovApplication;
56918
57086
  govCreateOfficial: GovOfficial;
56919
57087
  govCreateOfficialCommitment: GovOfficialCommitment;
56920
57088
  govCreatePayment: GovPayment;
@@ -56955,7 +57123,11 @@ export type Mutation = {
56955
57123
  govRecordElectionResults: GovElection;
56956
57124
  govRecordIndicatorValue: GovIndicatorValue;
56957
57125
  govRefundPayment: GovPayment;
57126
+ /** Self-scoped (Type B): the citizen's reply on their own application's thread (stored as a CITIZEN_MESSAGE case note). */
57127
+ govReplyToMyApplication: GovCaseNote;
56958
57128
  govReportGrievance: GovGrievance;
57129
+ /** Self-scoped: a citizen reports a grievance. The reporter is always the authenticated actor. */
57130
+ govReportMyGrievance: GovGrievance;
56959
57131
  /** Record a review decision. ACCEPTED records the accepted correction and stamps `appliedAt`; it never silently mutates the target record. */
56960
57132
  govReviewDataChangeProposal: GovDataChangeProposal;
56961
57133
  govReviewDocument: GovDocument;
@@ -56970,6 +57142,8 @@ export type Mutation = {
56970
57142
  /** Submit the calling actor's response. One response per actor per consultation. */
56971
57143
  govSubmitConsultationResponse: GovConsultationResponse;
56972
57144
  govSubmitDataChangeProposal: GovDataChangeProposal;
57145
+ /** Self-scoped (Type B): submit the caller's own DRAFT application. */
57146
+ govSubmitMyApplication: GovApplication;
56973
57147
  /** Advance an application through its review lifecycle (validated transitions). */
56974
57148
  govTransitionApplication: GovApplication;
56975
57149
  /** Advance a grievance through its resolution lifecycle (validated transitions). */
@@ -57125,6 +57299,10 @@ export type Mutation = {
57125
57299
  headshotmarketingUpdateSEOKeyword: HeadshotmarketingSeoKeyword;
57126
57300
  /** Notify @-mentioned members of a Farm Tasks comment (IN_APP notification). */
57127
57301
  healthybowlNotifyMention: Scalars['Boolean']['output'];
57302
+ /** Heartbeat an activity that waits for an asynchronous completion (details carry over to a retry). */
57303
+ heartbeatActivityAsync: WorkflowAsyncHeartbeatAck;
57304
+ /** Heartbeat, by its id, an activity that waits for an asynchronous completion. */
57305
+ heartbeatActivityById: WorkflowAsyncHeartbeatAck;
57128
57306
  /** Heartbeat one presence connection (expected about every 15s). Returns false when the presence cache is unavailable; the heartbeat is then dropped without affecting the dashboard. */
57129
57307
  heartbeatDashboardPresence: Scalars['Boolean']['output'];
57130
57308
  hideMessage: Message;
@@ -57305,11 +57483,7 @@ export type Mutation = {
57305
57483
  initializeNewWorkspace: InitializeNewWorkspaceResult;
57306
57484
  /** Initialize a newly created workspace with default configuration */
57307
57485
  initializeWorkspace: Workspace;
57308
- /**
57309
- * Service-internal workspace bootstrap: initializes default roles for a workspace
57310
- * by cloning system roles. Called by wspace-workspace-svc during cross-layer
57311
- * workspace sync, and safe to retry because it is idempotent.
57312
- */
57486
+ /** Service-internal workspace bootstrap: initializes default roles for a workspace by cloning system roles. Called by wspace-workspace-svc during cross-layer workspace sync, and safe to retry because it is idempotent. */
57313
57487
  initializeWorkspaceRoles: InitializeWorkspaceRolesResult;
57314
57488
  initiateOAuth: OAuthInitiationResult;
57315
57489
  /** Initiate a new upload session Returns session details and initial presigned URLs */
@@ -57777,6 +57951,11 @@ export type Mutation = {
57777
57951
  operateGgnomadBooking: GgnomadBooking;
57778
57952
  optimizeRoute: MtwRoute;
57779
57953
  overrideTimeCampusWorkspaceQuota: TimeCampusWorkspaceQuotaAssignment;
57954
+ /**
57955
+ * Pause activities of a durable-function run: no new attempt starts, and a running attempt learns of
57956
+ * the pause on its next heartbeat. Needs fluidgrids.run-control.
57957
+ */
57958
+ pauseActivity: WorkflowRun;
57780
57959
  /** BOFF-4388 — pauses an ACTIVE listing (hides it from booking) with an optional reason. */
57781
57960
  pauseGgnomadListing: GgnomadListing;
57782
57961
  /** Pause an ACTIVE workflow — new triggers no longer start runs. */
@@ -58469,6 +58648,7 @@ export type Mutation = {
58469
58648
  pswUpdateDeliverable: PswDeliverable;
58470
58649
  pswUpdateDocument: PswDocument;
58471
58650
  pswUpdateEngagement: PswEngagement;
58651
+ pswUpdateInvoice: PswInvoice;
58472
58652
  pswUpdateMatter: PswMatter;
58473
58653
  pswUpdateMilestone: PswMilestone;
58474
58654
  pswUpdatePracticeArea: PswPracticeArea;
@@ -58643,11 +58823,7 @@ export type Mutation = {
58643
58823
  registerNode: NodeEndpointConfig;
58644
58824
  /** Register (upsert) a parser type in the GLOBAL ParserTypeConfig registry and, with autoInstall, make it the workspace's active version. Re-registering the same (parserTypeKey, parserVersion) refreshes its definition but preserves the operator-set status. TRUST BOUNDARY (same as registerWidgetType): the catalog write is global while RBAC is scoped to input.workspaceId. This is the store service path — restricted to service/super_admin actors at the public gateway. */
58645
58825
  registerParserType: ParserTypeRegistration;
58646
- /**
58647
- * Register a resource with custom RBAC configurations.
58648
- * Called automatically when the first override or visibility rule is created for a resource.
58649
- * Can also be called manually for explicit registration.
58650
- */
58826
+ /** Register a resource with custom RBAC configurations. Called automatically when the first override or visibility rule is created for a resource. Can also be called manually for explicit registration. */
58651
58827
  registerResource: Resource;
58652
58828
  /** Register an uploaded part */
58653
58829
  registerUploadedPart: UploadPartResponse;
@@ -58876,6 +59052,10 @@ export type Mutation = {
58876
59052
  resendWorkspaceInvite: WorkspaceInvite;
58877
59053
  /** Reserve a managed subdomain under *.vibetunnels.com. The domain is created in VERIFIED state and can be attached immediately. */
58878
59054
  reserveTunnelSubdomain: TunnelDomain;
59055
+ /** Restart the attempt count of activities waiting for their next attempt, and dispatch them now. */
59056
+ resetActivity: WorkflowRun;
59057
+ /** Restore the caller's BigConsole settings in the request workspace to the defaults, and keep them saved so every device picks the reset up. */
59058
+ resetBigConsoleSettings: BigConsoleSettings;
58879
59059
  resetCircuitBreaker: CircuitBreakerState;
58880
59060
  /** Reset monthly usage counters for the current workspace. Workspace ID is read from gateway context (x-workspace-id header). */
58881
59061
  resetMonthlyUsage: WorkspaceResourceUsage;
@@ -59156,6 +59336,16 @@ export type Mutation = {
59156
59336
  runSecurityScan: SecurityScanRun;
59157
59337
  /** Run the workspace's time-intelligence sweep. Called by wspace-scheduler-svc as this service's own service actor; a super admin may run it on demand. Any other caller is refused. */
59158
59338
  runTimeCampusTimeIntelligenceSweep: TimeCampusTimeIntelligenceSweep;
59339
+ /**
59340
+ * Run a workflow's test cases, each as its own TEST run, and return the suite run
59341
+ * to poll with workflowTestRun. Canvas workflows only.
59342
+ *
59343
+ * Usage tracking: not decorated with `@usage`. Suite runs are TEST runs and are
59344
+ * exempt from the fluidgrids.runs.monthly quota by design; the cases per workflow
59345
+ * (50), the suites in flight per workspace (5) and the suites started per
59346
+ * workspace per hour (60) are capped instead.
59347
+ */
59348
+ runWorkflowTests: WorkflowTestRun;
59159
59349
  /**
59160
59350
  * Append one completed turn (prompt + reply), creating the conversation on the first turn. NOT idempotent: a retried call appends a duplicate turn. This resolver writes both prompt and reply rows internally, so it performs manual quota checks/tracking instead of using a fixed-amount @usage directive.
59161
59351
  * @deprecated Use the my* assistant-history fields (BOFF-7335).
@@ -59877,6 +60067,8 @@ export type Mutation = {
59877
60067
  unlockVault: Vault;
59878
60068
  unmatchHealthyBowlStatementLine: HealthyBowlBankStatementLine;
59879
60069
  unmuteConversation: ConversationMembership;
60070
+ /** Unpause activities; their next attempt is dispatched now. */
60071
+ unpauseActivity: WorkflowRun;
59880
60072
  unpinConversation: ConversationMembership;
59881
60073
  unpinMessage: Message;
59882
60074
  /** Remove pinned data from a node (BOFF-7511). */
@@ -59932,6 +60124,8 @@ export type Mutation = {
59932
60124
  updateActiveSession: UiSession;
59933
60125
  /** Update active vibe */
59934
60126
  updateActiveVibe: UiSession;
60127
+ /** Change the retry policy and timeouts of activities, from their next attempt. Needs fluidgrids.run-control. */
60128
+ updateActivityOptions: WorkflowRun;
59935
60129
  /** Update an agent definition. Narrowing the allowlist or scope applies to the next tool call. */
59936
60130
  updateAgentDefinition: AgentDefinition;
59937
60131
  updateAgentInstructionFile: AgentInstructionFile;
@@ -59958,6 +60152,8 @@ export type Mutation = {
59958
60152
  updateAvailabilityRule: AvailabilityRule;
59959
60153
  /** Update an existing dashboard */
59960
60154
  updateBigConsoleDashboard: BigConsoleDashboard;
60155
+ /** Save changes to the caller's BigConsole settings in the request workspace, creating the record on first save. Self-scoped like bigConsoleSettings. */
60156
+ updateBigConsoleSettings: BigConsoleSettings;
59961
60157
  /** Update a BigConsole widget */
59962
60158
  updateBigConsoleWidget: BigConsoleWidget;
59963
60159
  updateBookingPage: BookingPage;
@@ -60429,8 +60625,16 @@ export type Mutation = {
60429
60625
  updateWorkflowExecutionSettings: WorkflowExecutionSettings;
60430
60626
  /** Change the notification preferences of a workflow. */
60431
60627
  updateWorkflowNotificationSettings: WorkflowNotificationSettings;
60628
+ /**
60629
+ * Send an update to a durable-function run and wait (at most timeoutMs, capped at 15 s) until it
60630
+ * reaches `waitFor`. The updateId is its idempotency key. A rejected update leaves no history. Needs
60631
+ * fluidgrids.run-control and a bundle built with the Phase C SDK.
60632
+ */
60633
+ updateWorkflowRun: WorkflowUpdateResult;
60432
60634
  /** Update an existing scheduled job */
60433
60635
  updateWorkflowScheduledJob: ScheduledJobResponse;
60636
+ /** Replace a test case. */
60637
+ updateWorkflowTestCase: WorkflowTestCase;
60434
60638
  updateWorkflowVariable: WorkflowVariableResponse;
60435
60639
  /** Update an existing workspace */
60436
60640
  updateWorkspace: Workspace;
@@ -60625,6 +60829,13 @@ export type Mutation = {
60625
60829
  * INTERNAL: Requires actorType SERVICE
60626
60830
  */
60627
60831
  workerNotifyHumanResponders: WorkerNotifyHumanRespondersResponse;
60832
+ /**
60833
+ * Park the attempt in flight for asynchronous completion (Phase C): a send-and-wait waiting for a
60834
+ * person, a tool approval, a policy approval, or a user completeAsync() (external, which gets a task
60835
+ * token). Refused with FEATURE_DISABLED while fluidgrids.run-control is off.
60836
+ * INTERNAL: Requires actorType SERVICE
60837
+ */
60838
+ workerParkActivityAsync: WorkerActivityParkResult;
60628
60839
  /**
60629
60840
  * Record an activity heartbeat (never written to history). The acknowledgement carries a pending
60630
60841
  * cancellation.
@@ -62214,6 +62425,14 @@ export type MutationBuiSyncExternalEnrollmentArgs = {
62214
62425
  input: BuiSyncExternalEnrollmentInput;
62215
62426
  };
62216
62427
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62428
+ export type MutationBuiSyncExternalLessonArgs = {
62429
+ input: BuiSyncExternalLessonInput;
62430
+ };
62431
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62432
+ export type MutationBuiSyncExternalLessonProgressArgs = {
62433
+ input: BuiSyncExternalLessonProgressInput;
62434
+ };
62435
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62217
62436
  export type MutationBuiSyncLtiGradeArgs = {
62218
62437
  resourceLinkId: Scalars['ID']['input'];
62219
62438
  submissionId: Scalars['ID']['input'];
@@ -63175,6 +63394,18 @@ export type MutationCompleteActionItemArgs = {
63175
63394
  workspaceId: Scalars['ID']['input'];
63176
63395
  };
63177
63396
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63397
+ export type MutationCompleteActivityAsyncArgs = {
63398
+ result?: InputMaybe<Scalars['JSON']['input']>;
63399
+ taskToken: Scalars['String']['input'];
63400
+ };
63401
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63402
+ export type MutationCompleteActivityByIdArgs = {
63403
+ activityId: Scalars['ID']['input'];
63404
+ result?: InputMaybe<Scalars['JSON']['input']>;
63405
+ runId?: InputMaybe<Scalars['ID']['input']>;
63406
+ target?: InputMaybe<RunTargetInput>;
63407
+ };
63408
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63178
63409
  export type MutationCompleteGgnomadBookingArgs = {
63179
63410
  id: Scalars['ID']['input'];
63180
63411
  };
@@ -63767,6 +63998,10 @@ export type MutationCreateActionShareLinkArgs = {
63767
63998
  input: CreateShareGrantLinkInput;
63768
63999
  };
63769
64000
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
64001
+ export type MutationCreateActivityPauseRuleArgs = {
64002
+ input: WorkflowActivityPauseRuleInput;
64003
+ };
64004
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63770
64005
  export type MutationCreateAgentDefinitionArgs = {
63771
64006
  input: AgentDefinitionInput;
63772
64007
  };
@@ -65318,6 +65553,17 @@ export type MutationCreateWorkflowScheduledJobArgs = {
65318
65553
  input: ScheduledJobInput;
65319
65554
  };
65320
65555
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
65556
+ export type MutationCreateWorkflowTestCaseArgs = {
65557
+ input: WorkflowTestCaseInput;
65558
+ workflowKey: Scalars['String']['input'];
65559
+ };
65560
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
65561
+ export type MutationCreateWorkflowTestCaseFromRunArgs = {
65562
+ description?: InputMaybe<Scalars['String']['input']>;
65563
+ name: Scalars['String']['input'];
65564
+ runId: Scalars['ID']['input'];
65565
+ };
65566
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
65321
65567
  export type MutationCreateWorkflowVariableArgs = {
65322
65568
  input: CreateWorkflowVariableInput;
65323
65569
  };
@@ -65458,6 +65704,10 @@ export type MutationDeleteActionPolicyArgs = {
65458
65704
  id: Scalars['ID']['input'];
65459
65705
  };
65460
65706
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
65707
+ export type MutationDeleteActivityPauseRuleArgs = {
65708
+ id: Scalars['ID']['input'];
65709
+ };
65710
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
65461
65711
  export type MutationDeleteAgentDefinitionArgs = {
65462
65712
  id: Scalars['ID']['input'];
65463
65713
  };
@@ -66784,6 +67034,10 @@ export type MutationDeleteWorkflowScheduledJobArgs = {
66784
67034
  jobId: Scalars['ID']['input'];
66785
67035
  };
66786
67036
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67037
+ export type MutationDeleteWorkflowTestCaseArgs = {
67038
+ id: Scalars['ID']['input'];
67039
+ };
67040
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
66787
67041
  export type MutationDeleteWorkflowVariableArgs = {
66788
67042
  id: Scalars['ID']['input'];
66789
67043
  };
@@ -67799,6 +68053,18 @@ export type MutationExtendSandboxTtlArgs = {
67799
68053
  id: Scalars['ID']['input'];
67800
68054
  };
67801
68055
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68056
+ export type MutationFailActivityAsyncArgs = {
68057
+ failure: WorkflowAsyncFailureInput;
68058
+ taskToken: Scalars['String']['input'];
68059
+ };
68060
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68061
+ export type MutationFailActivityByIdArgs = {
68062
+ activityId: Scalars['ID']['input'];
68063
+ failure: WorkflowAsyncFailureInput;
68064
+ runId?: InputMaybe<Scalars['ID']['input']>;
68065
+ target?: InputMaybe<RunTargetInput>;
68066
+ };
68067
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67802
68068
  export type MutationFgTriageFailedRunsArgs = {
67803
68069
  input?: InputMaybe<FgTriageFailedRunsInput>;
67804
68070
  };
@@ -67924,6 +68190,10 @@ export type MutationGovAddDocumentArgs = {
67924
68190
  input: GovAddDocumentInput;
67925
68191
  };
67926
68192
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68193
+ export type MutationGovAddMyDocumentArgs = {
68194
+ input: GovAddDocumentInput;
68195
+ };
68196
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67927
68197
  export type MutationGovArchiveAgencyArgs = {
67928
68198
  id: Scalars['ID']['input'];
67929
68199
  };
@@ -67985,6 +68255,10 @@ export type MutationGovCreateJurisdictionEventArgs = {
67985
68255
  input: GovCreateJurisdictionEventInput;
67986
68256
  };
67987
68257
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68258
+ export type MutationGovCreateMyApplicationArgs = {
68259
+ input: GovCreateApplicationInput;
68260
+ };
68261
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67988
68262
  export type MutationGovCreateOfficialArgs = {
67989
68263
  input: GovCreateOfficialInput;
67990
68264
  };
@@ -68133,10 +68407,19 @@ export type MutationGovRefundPaymentArgs = {
68133
68407
  id: Scalars['ID']['input'];
68134
68408
  };
68135
68409
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68410
+ export type MutationGovReplyToMyApplicationArgs = {
68411
+ applicationId: Scalars['ID']['input'];
68412
+ body: Scalars['String']['input'];
68413
+ };
68414
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68136
68415
  export type MutationGovReportGrievanceArgs = {
68137
68416
  input: GovReportGrievanceInput;
68138
68417
  };
68139
68418
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68419
+ export type MutationGovReportMyGrievanceArgs = {
68420
+ input: GovReportGrievanceInput;
68421
+ };
68422
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68140
68423
  export type MutationGovReviewDataChangeProposalArgs = {
68141
68424
  decision: GovProposalStatus;
68142
68425
  id: Scalars['ID']['input'];
@@ -68179,6 +68462,10 @@ export type MutationGovSubmitDataChangeProposalArgs = {
68179
68462
  input: GovSubmitDataChangeProposalInput;
68180
68463
  };
68181
68464
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68465
+ export type MutationGovSubmitMyApplicationArgs = {
68466
+ id: Scalars['ID']['input'];
68467
+ };
68468
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68182
68469
  export type MutationGovTransitionApplicationArgs = {
68183
68470
  id: Scalars['ID']['input'];
68184
68471
  reason?: InputMaybe<Scalars['String']['input']>;
@@ -68574,6 +68861,18 @@ export type MutationHealthybowlNotifyMentionArgs = {
68574
68861
  input: HealthyBowlNotifyMentionInput;
68575
68862
  };
68576
68863
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68864
+ export type MutationHeartbeatActivityAsyncArgs = {
68865
+ details?: InputMaybe<Scalars['JSON']['input']>;
68866
+ taskToken: Scalars['String']['input'];
68867
+ };
68868
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68869
+ export type MutationHeartbeatActivityByIdArgs = {
68870
+ activityId: Scalars['ID']['input'];
68871
+ details?: InputMaybe<Scalars['JSON']['input']>;
68872
+ runId?: InputMaybe<Scalars['ID']['input']>;
68873
+ target?: InputMaybe<RunTargetInput>;
68874
+ };
68875
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68577
68876
  export type MutationHeartbeatDashboardPresenceArgs = {
68578
68877
  connectionId: Scalars['ID']['input'];
68579
68878
  dashboardId: Scalars['ID']['input'];
@@ -70379,6 +70678,13 @@ export type MutationOverrideTimeCampusWorkspaceQuotaArgs = {
70379
70678
  input: OverrideTimeCampusWorkspaceQuotaInput;
70380
70679
  };
70381
70680
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
70681
+ export type MutationPauseActivityArgs = {
70682
+ reason: Scalars['String']['input'];
70683
+ runId?: InputMaybe<Scalars['ID']['input']>;
70684
+ selector: WorkflowActivitySelectorInput;
70685
+ target?: InputMaybe<RunTargetInput>;
70686
+ };
70687
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
70382
70688
  export type MutationPauseGgnomadListingArgs = {
70383
70689
  id: Scalars['ID']['input'];
70384
70690
  listingType: GgnomadListingType;
@@ -72139,6 +72445,11 @@ export type MutationPswUpdateEngagementArgs = {
72139
72445
  input: PswUpdateEngagementInput;
72140
72446
  };
72141
72447
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
72448
+ export type MutationPswUpdateInvoiceArgs = {
72449
+ id: Scalars['ID']['input'];
72450
+ input: PswUpdateInvoiceInput;
72451
+ };
72452
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
72142
72453
  export type MutationPswUpdateMatterArgs = {
72143
72454
  id: Scalars['ID']['input'];
72144
72455
  input: PswUpdateMatterInput;
@@ -73216,6 +73527,13 @@ export type MutationReserveTunnelSubdomainArgs = {
73216
73527
  input: ReserveTunnelSubdomainInput;
73217
73528
  };
73218
73529
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73530
+ export type MutationResetActivityArgs = {
73531
+ resetHeartbeat?: InputMaybe<Scalars['Boolean']['input']>;
73532
+ runId?: InputMaybe<Scalars['ID']['input']>;
73533
+ selector: WorkflowActivitySelectorInput;
73534
+ target?: InputMaybe<RunTargetInput>;
73535
+ };
73536
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73219
73537
  export type MutationResetCircuitBreakerArgs = {
73220
73538
  scope: Scalars['String']['input'];
73221
73539
  scopeValue: Scalars['String']['input'];
@@ -73911,6 +74229,10 @@ export type MutationRunTimeCampusTimeIntelligenceSweepArgs = {
73911
74229
  input?: InputMaybe<TimeCampusTimeIntelligenceSweepInput>;
73912
74230
  };
73913
74231
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74232
+ export type MutationRunWorkflowTestsArgs = {
74233
+ input: RunWorkflowTestsInput;
74234
+ };
74235
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73914
74236
  export type MutationSaveAssistantTurnArgs = {
73915
74237
  input: SaveAssistantTurnInput;
73916
74238
  };
@@ -75760,6 +76082,14 @@ export type MutationUnmuteConversationArgs = {
75760
76082
  conversationId: Scalars['ID']['input'];
75761
76083
  };
75762
76084
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
76085
+ export type MutationUnpauseActivityArgs = {
76086
+ resetAttempts?: InputMaybe<Scalars['Boolean']['input']>;
76087
+ resetHeartbeat?: InputMaybe<Scalars['Boolean']['input']>;
76088
+ runId?: InputMaybe<Scalars['ID']['input']>;
76089
+ selector: WorkflowActivitySelectorInput;
76090
+ target?: InputMaybe<RunTargetInput>;
76091
+ };
76092
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
75763
76093
  export type MutationUnpinConversationArgs = {
75764
76094
  conversationId: Scalars['ID']['input'];
75765
76095
  };
@@ -75927,6 +76257,13 @@ export type MutationUpdateActiveVibeArgs = {
75927
76257
  vibeId?: InputMaybe<Scalars['ID']['input']>;
75928
76258
  };
75929
76259
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
76260
+ export type MutationUpdateActivityOptionsArgs = {
76261
+ options: WorkflowActivityOptionsInput;
76262
+ runId?: InputMaybe<Scalars['ID']['input']>;
76263
+ selector: WorkflowActivitySelectorInput;
76264
+ target?: InputMaybe<RunTargetInput>;
76265
+ };
76266
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
75930
76267
  export type MutationUpdateAgentDefinitionArgs = {
75931
76268
  id: Scalars['ID']['input'];
75932
76269
  input: AgentDefinitionInput;
@@ -76027,6 +76364,10 @@ export type MutationUpdateBigConsoleDashboardArgs = {
76027
76364
  input: BigConsoleUpdateDashboardInput;
76028
76365
  };
76029
76366
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
76367
+ export type MutationUpdateBigConsoleSettingsArgs = {
76368
+ input: BigConsoleUpdateSettingsInput;
76369
+ };
76370
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
76030
76371
  export type MutationUpdateBigConsoleWidgetArgs = {
76031
76372
  input: BigConsoleUpdateWidgetInput;
76032
76373
  };
@@ -77746,11 +78087,26 @@ export type MutationUpdateWorkflowNotificationSettingsArgs = {
77746
78087
  input: UpdateWorkflowNotificationSettingsInput;
77747
78088
  };
77748
78089
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
78090
+ export type MutationUpdateWorkflowRunArgs = {
78091
+ args?: InputMaybe<Scalars['JSON']['input']>;
78092
+ name: Scalars['String']['input'];
78093
+ runId?: InputMaybe<Scalars['ID']['input']>;
78094
+ target?: InputMaybe<RunTargetInput>;
78095
+ timeoutMs?: InputMaybe<Scalars['Int']['input']>;
78096
+ updateId: Scalars['ID']['input'];
78097
+ waitFor?: InputMaybe<WorkflowUpdateWaitFor>;
78098
+ };
78099
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
77749
78100
  export type MutationUpdateWorkflowScheduledJobArgs = {
77750
78101
  input: WorkflowUpdateScheduledJobInput;
77751
78102
  jobId: Scalars['ID']['input'];
77752
78103
  };
77753
78104
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
78105
+ export type MutationUpdateWorkflowTestCaseArgs = {
78106
+ id: Scalars['ID']['input'];
78107
+ input: WorkflowTestCaseInput;
78108
+ };
78109
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
77754
78110
  export type MutationUpdateWorkflowVariableArgs = {
77755
78111
  id: Scalars['ID']['input'];
77756
78112
  input: UpdateWorkflowVariableInput;
@@ -77986,6 +78342,10 @@ export type MutationWorkerNotifyHumanRespondersArgs = {
77986
78342
  input: WorkerNotifyHumanRespondersInput;
77987
78343
  };
77988
78344
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
78345
+ export type MutationWorkerParkActivityAsyncArgs = {
78346
+ input: WorkerActivityParkInput;
78347
+ };
78348
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
77989
78349
  export type MutationWorkerRecordActivityHeartbeatArgs = {
77990
78350
  activityId: Scalars['ID']['input'];
77991
78351
  attempt: Scalars['Int']['input'];
@@ -79042,6 +79402,11 @@ export type NodeState = {
79042
79402
  runId: Scalars['String']['output'];
79043
79403
  startTime?: Maybe<Scalars['DateTime']['output']>;
79044
79404
  status: NodeStatus;
79405
+ /**
79406
+ * True when a saved test case's connection mock answered this node instead of a
79407
+ * real call (BOFF-9960). Always false on a PRODUCTION run.
79408
+ */
79409
+ usedMock: Scalars['Boolean']['output'];
79045
79410
  /**
79046
79411
  * True when this node's output came from pinned data instead of a real call
79047
79412
  * (BOFF-7511). Always false on a PRODUCTION run.
@@ -87715,6 +88080,7 @@ export type PswCreateInvoiceInput = {
87715
88080
  dueDate?: InputMaybe<Scalars['DateTime']['input']>;
87716
88081
  engagementId?: InputMaybe<Scalars['ID']['input']>;
87717
88082
  issueDate?: InputMaybe<Scalars['DateTime']['input']>;
88083
+ /** Manually entered lines: [{ description, quantity, rate, amount? }]. When supplied, subtotal and total are derived from the lines (a supplied subtotal or total must match). Cannot be combined with timeEntryIds or milestoneIds. */
87718
88084
  lineItems?: InputMaybe<Scalars['JSON']['input']>;
87719
88085
  milestoneIds?: InputMaybe<Array<Scalars['ID']['input']>>;
87720
88086
  notes?: InputMaybe<Scalars['String']['input']>;
@@ -88810,6 +89176,11 @@ export type PswUpdateEngagementInput = {
88810
89176
  startDate?: InputMaybe<Scalars['DateTime']['input']>;
88811
89177
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
88812
89178
  };
89179
+ /** Replaces the manually entered line items of a DRAFT invoice. Each line is { description, quantity, rate } (an optional amount must equal quantity x rate rounded to cents); subtotal and total are recomputed server-side. Omit taxAmount to keep the current tax. */
89180
+ export type PswUpdateInvoiceInput = {
89181
+ lineItems: Scalars['JSON']['input'];
89182
+ taxAmount?: InputMaybe<Scalars['Float']['input']>;
89183
+ };
88813
89184
  export type PswUpdateMatterInput = {
88814
89185
  description?: InputMaybe<Scalars['String']['input']>;
88815
89186
  dueDate?: InputMaybe<Scalars['DateTime']['input']>;
@@ -89071,11 +89442,7 @@ export type Query = {
89071
89442
  _planmagnetService?: Maybe<Scalars['String']['output']>;
89072
89443
  _planmagnetVersion?: Maybe<Scalars['String']['output']>;
89073
89444
  _serviceHealth: Scalars['String']['output'];
89074
- /**
89075
- * Who a person is reached through when a service shares its own resources with chosen people,
89076
- * groups or projects (service-only): the groups and projects they belong to in the calling
89077
- * service's workspace, and whether they administer the resource type there
89078
- */
89445
+ /** Who a person is reached through when a service shares its own resources with chosen people, groups or projects (service-only): the groups and projects they belong to in the calling service's workspace, and whether they administer the resource type there */
89079
89446
  accessPrincipals: AccessPrincipals;
89080
89447
  /** Anonymously reveal the credential(s) behind a signed share link. */
89081
89448
  accessSharedSecret: SharedSecretView;
@@ -89305,6 +89672,8 @@ export type Query = {
89305
89672
  availableSandboxTags: Array<SandboxAvailableTag>;
89306
89673
  /** List assignable tags in the workspace */
89307
89674
  availableVibecontrolsTags: Array<AvailableTag>;
89675
+ /** The caller's BigConsole settings in the request workspace. Self-scoped: the owner is always the calling actor and the workspace is always the request workspace, so the field takes no identity arguments. */
89676
+ bigConsoleSettings: BigConsoleSettings;
89308
89677
  bigconsoleEntityTags: Array<BigConsoleTagAssignment>;
89309
89678
  /**
89310
89679
  * Get billing summary with cost estimation
@@ -89396,15 +89765,18 @@ export type Query = {
89396
89765
  /** Machine-only published course source export; not a learner access grant. */
89397
89766
  buiCourseKnowledgeSources: BuiCourseKnowledgeSourcePage;
89398
89767
  buiEnrollment?: Maybe<BuiEnrollment>;
89768
+ /** Service-only (BOFF-10480): the canonical state of the given source records, for the source product's parity check. Ids with no canonical row are simply absent from the result. */
89769
+ buiExternalSyncRecords: Array<BuiExternalSyncRecord>;
89399
89770
  /** Liveness/identity probe for the Buildmyiq subgraph. */
89400
89771
  buiHealth: Scalars['String']['output'];
89401
89772
  buiListAssessments: BuiAssessmentConnection;
89402
- /** Workspace-wide certificate list (instructors/facilitators/admins only — see `buildmyiq-certificate` action defaults, `viewerDefault: false` on `list`/`read`). Learners viewing their own credentials MUST use `buiMyCertificates` instead. No `learnerId` arg (BOFF FERPA/IDOR hardening): the elevated instructor/admin list shows the whole workspace; a learner's own credentials come from the self-scoped `buiMyCertificates`. */
89773
+ /** Workspace-wide certificate list (instructors/facilitators/admins only — see `buildmyiq-certificate` action defaults, `viewerDefault: false` on `list`/`read`). Learners viewing their own credentials MUST use `buiMyCertificates` instead. No `learnerId` arg (BOFF FERPA/IDOR hardening): the elevated instructor/admin list shows the whole workspace; a learner's own credentials come from the self-scoped `buiMyCertificates`. `source` (BOFF-10481) narrows the list to the certificates mirrored from one product; omit it to list native and mirrored certificates alike. */
89403
89774
  buiListCertificates: BuiCertificateConnection;
89404
89775
  buiListCertifications: BuiCertificationConnection;
89405
89776
  buiListCohorts: BuiCohortConnection;
89777
+ /** Courses in the workspace. `source` (BOFF-10481) narrows the list to the courses mirrored from one product, so a product's own catalog (for example TechnoSpam's) never lists the workspace's native BuildMyIQ courses. Omit it to list every course, native and mirrored alike. */
89406
89778
  buiListCourses: BuiCourseConnection;
89407
- /** Workspace-wide enrollment list (instructors/facilitators/admins only — see `buildmyiq-enrollment` action defaults in wspace-rbac-svc's seed, which set `viewerDefault: false` on `list`/`read` so a plain workspace Viewer cannot enumerate every learner's enrollments). Learners viewing their own enrollments MUST use `buiMyEnrollments`/`buiMyEnrollment` instead. No `learnerId` arg (BOFF FERPA/IDOR hardening): the elevated instructor/admin list shows the whole workspace and is filtered client-side; a learner's own enrollments come from the self-scoped `buiMyEnrollments`. The single-learner M2M point read remains available via `buiCourseEnrollment` for consuming subgraphs. */
89779
+ /** Workspace-wide enrollment list (instructors/facilitators/admins only — see `buildmyiq-enrollment` action defaults in wspace-rbac-svc's seed, which set `viewerDefault: false` on `list`/`read` so a plain workspace Viewer cannot enumerate every learner's enrollments). Learners viewing their own enrollments MUST use `buiMyEnrollments`/`buiMyEnrollment` instead. No `learnerId` arg (BOFF FERPA/IDOR hardening): the elevated instructor/admin list shows the whole workspace and is filtered client-side; a learner's own enrollments come from the self-scoped `buiMyEnrollments`. The single-learner M2M point read remains available via `buiCourseEnrollment` for consuming subgraphs. `source` (BOFF-10481) narrows the list to the enrollments mirrored from one product; omit it to list native and mirrored enrollments alike. */
89408
89780
  buiListEnrollments: BuiEnrollmentConnection;
89409
89781
  buiListLessons: BuiLessonConnection;
89410
89782
  buiListModules: BuiModuleConnection;
@@ -89426,7 +89798,9 @@ export type Query = {
89426
89798
  buiLtiResourceLinks: Array<BuiLtiResourceLink>;
89427
89799
  /** Last-synced NRPS roster for one LTI placement's course context. */
89428
89800
  buiLtiRoster: Array<BuiLtiRosterMember>;
89429
- /** Type-C self-scoped list: the calling learner's own certificates. No `learnerId` arg — see `buiListCertificates` for the workspace-wide/ instructor equivalent. */
89801
+ /** Type-B self-scoped single lookup (BOFF-10481): `id` identifies the certificate, but the resolver owner-filters by `ctx.actor.id` (`learnerId`) and returns null (never FORBIDDEN) when it does not exist or belongs to someone else, so existence is never leaked. */
89802
+ buiMyCertificate?: Maybe<BuiCertificate>;
89803
+ /** Type-C self-scoped list: the calling learner's own certificates. No `learnerId` arg — see `buiListCertificates` for the workspace-wide/ instructor equivalent. `source` (BOFF-10481) narrows the list to the certificates mirrored from one product. */
89430
89804
  buiMyCertificates: BuiCertificateConnection;
89431
89805
  /** Live course access for the authenticated learner; unavailable courses return false. */
89432
89806
  buiMyCourseAccess: BuiLearnerCourseAccess;
@@ -89437,7 +89811,7 @@ export type Query = {
89437
89811
  buiMyCourseAssistantTurn?: Maybe<BuiCourseAssistantTurn>;
89438
89812
  /** Type-B self-scoped single lookup: `id` identifies the enrollment, but the resolver owner-filters by `ctx.actor.id` (`learnerId`) and returns null (never leaks FORBIDDEN) if the caller doesn't own it. */
89439
89813
  buiMyEnrollment?: Maybe<BuiEnrollment>;
89440
- /** Type-C self-scoped list: the calling learner's own enrollments. No `learnerId` arg — identity comes from the authenticated actor (`ctx.actor.id`), never from client input (BOFF FERPA/IDOR fix — see `buiListEnrollments` for the workspace-wide/instructor equivalent). */
89814
+ /** Type-C self-scoped list: the calling learner's own enrollments. No `learnerId` arg — identity comes from the authenticated actor (`ctx.actor.id`), never from client input (BOFF FERPA/IDOR fix — see `buiListEnrollments` for the workspace-wide/instructor equivalent). `source` (BOFF-10481) narrows the list to the enrollments mirrored from one product (for example the learner's TechnoSpam enrollments). */
89441
89815
  buiMyEnrollments: BuiEnrollmentConnection;
89442
89816
  /** Type-C self-scoped lookup: the calling learner's own current (most recent, unexpired) proctoring session for an assessment. No `learnerId` arg — identity comes from the authenticated actor, never client input. */
89443
89817
  buiMyProctoringSession?: Maybe<BuiProctoringSession>;
@@ -89488,10 +89862,7 @@ export type Query = {
89488
89862
  checkPermission: PermissionCheckResult;
89489
89863
  /** Check multiple permissions at once (max 50) */
89490
89864
  checkPermissions: Array<PermissionCheckResult>;
89491
- /**
89492
- * Whether a requester may grant roles workspace-wide — the checks setActorRoles applies to added
89493
- * roles, with no target actor and no write (service-only)
89494
- */
89865
+ /** Whether a requester may grant roles workspace-wide — the checks setActorRoles applies to added roles, with no target actor and no write (service-only) */
89495
89866
  checkRoleGrant: RoleGrantCheckResult;
89496
89867
  /** Check if an actor can see a resource */
89497
89868
  checkVisibility: VisibilityCheckResult;
@@ -90841,6 +91212,8 @@ export type Query = {
90841
91212
  govListPermits: GovPermitConnection;
90842
91213
  govListRoutingRules: GovRoutingRuleConnection;
90843
91214
  govListServices: GovServiceConnection;
91215
+ /** Self-scoped (Type B): one of the calling citizen's OWN applications. Owner- filtered by the authenticated actor; anyone else's application is NOT_FOUND, never FORBIDDEN. INTERNAL case notes are never returned on this path. */
91216
+ govMyApplication: GovApplication;
90844
91217
  /** Self-scoped (Type C, no identity arg): the calling citizen's own applications. The resolver filters by the authenticated actor id — that filter IS the access control — so any authenticated actor may call this regardless of workspace RBAC role. Citizen-facing "my applications" UIs must use this instead of `govListApplications`, which is restricted to officer/agency roles. */
90845
91218
  govMyApplications: GovApplicationConnection;
90846
91219
  /** The calling actor's own response to a consultation, if any. */
@@ -90849,6 +91222,8 @@ export type Query = {
90849
91222
  govMyDataChangeProposals: GovDataChangeProposalConnection;
90850
91223
  /** Jurisdictions the calling actor follows. */
90851
91224
  govMyFollowedJurisdictions: GovJurisdictionConnection;
91225
+ /** Self-scoped (Type B): one of the calling citizen's OWN grievances; anyone else's is NOT_FOUND. */
91226
+ govMyGrievance: GovGrievance;
90852
91227
  /** Self-scoped (Type C, no identity arg): grievances filed by the calling citizen (reporterId = authenticated actor id). */
90853
91228
  govMyGrievances: GovGrievanceConnection;
90854
91229
  /** Self-scoped (Type C, no identity arg): payments made by the calling citizen (payerId = authenticated actor id). Citizen-facing "my payments" UIs must use this instead of `govListPayments`, which is restricted to officer/agency roles. */
@@ -90867,6 +91242,10 @@ export type Query = {
90867
91242
  /** Asset counts by category for a jurisdiction — drives map legends and registry summaries. */
90868
91243
  govPublicAssetSummary: Array<GovAssetCategoryCount>;
90869
91244
  govPublicAssets: GovPublicAssetConnection;
91245
+ /** Self-scoped (Type B): one PUBLISHED service; any other status is NOT_FOUND. */
91246
+ govPublishedService: GovService;
91247
+ /** Self-scoped (Type C): the PUBLISHED service catalog for citizens. Draft, suspended and retired services are never returned; no staff permission is needed to browse what an agency has published. */
91248
+ govPublishedServices: GovServiceConnection;
90870
91249
  govService?: Maybe<GovService>;
90871
91250
  /** Public permit verification by its printed code (citizen-facing trust check). */
90872
91251
  govVerifyPermit?: Maybe<GovPermit>;
@@ -91707,10 +92086,7 @@ export type Query = {
91707
92086
  myPendingInvitations: Array<Invitation>;
91708
92087
  /** Invitee-side: list pending invites whose `inviteeEmail` matches the caller's email (resolved from the tenant backend). `scopeType: "self"` because access is the user's own email — membership in any workspace is irrelevant. */
91709
92088
  myPendingInvites: Array<WorkspaceInvite>;
91710
- /**
91711
- * Get current user's permissions in a workspace (self-service).
91712
- * Returns full permission details including roles, permission strings, and cache TTL.
91713
- */
92089
+ /** Get current user's permissions in a workspace (self-service). Returns full permission details including roles, permission strings, and cache TTL. */
91714
92090
  myPermissions: EffectivePermissions;
91715
92091
  myPersonalDataSummary: TimeCampusPersonalDataSummary;
91716
92092
  /** Get projects for the current authenticated user Self-list (Type C): resolver filters by ctx.userId, so the returned set IS the access list. Any authenticated user may call this; no RBAC permission is checked. (BOFF-2655) */
@@ -91719,10 +92095,7 @@ export type Query = {
91719
92095
  myRecommendations: Array<TimeCampusRecommendation>;
91720
92096
  /** Get resources created by the current authenticated user. Self-scoped: the resolver filters by ctx.actorId (createdBy). */
91721
92097
  myResources: WorkspaceResourceList;
91722
- /**
91723
- * Get current user's roles in a workspace (lightweight, self-service).
91724
- * Use this for quick role checks without fetching full permissions.
91725
- */
92098
+ /** Get current user's roles in a workspace (lightweight, self-service). Use this for quick role checks without fetching full permissions. */
91726
92099
  myRoles: MyRolesResult;
91727
92100
  /** Usage the assistant LLM proxy recorded for the caller's OWN Ask or Take-action sandbox. Another user's sandbox, or one that is not an assistant sandbox, is NOT_FOUND. */
91728
92101
  mySandboxLlmUsage: SandboxLlmUsage;
@@ -92279,6 +92652,13 @@ export type Query = {
92279
92652
  queryMetrics: MetricsQueryResult;
92280
92653
  queryPaths: PathQueryResult;
92281
92654
  queryRetention: RetentionQueryResult;
92655
+ /**
92656
+ * Ask a run a question without changing it. A durable-function run answers from a replay of its
92657
+ * history in the service (10 s; custom queries need a bundle built with the Phase C SDK); a canvas
92658
+ * run answers status, progress, nodeStates and nodeOutput (args { nodeId }). Needs
92659
+ * fluidgrids.run-control.
92660
+ */
92661
+ queryWorkflowRun: WorkflowQueryResult;
92282
92662
  /** Get RBAC analytics for a scope within a date range */
92283
92663
  rbacAnalytics: RbacAnalytics;
92284
92664
  /** Get RBAC configuration change history */
@@ -92312,24 +92692,11 @@ export type Query = {
92312
92692
  resourceTree: Array<Resource>;
92313
92693
  /** Get root resources for a tree view with bounded offset metadata. */
92314
92694
  resourceTreePage: ResourcePage;
92315
- /**
92316
- * Get all resource types. Optionally filter by product (PlatformProduct.slug):
92317
- * returns resource types mapped to that product, plus cross-product types (those
92318
- * with no product mapping) unless includeUnmapped is false. With no product arg,
92319
- * returns every resource type (backward compatible).
92320
- */
92695
+ /** Get all resource types. Optionally filter by product (PlatformProduct.slug): returns resource types mapped to that product, plus cross-product types (those with no product mapping) unless includeUnmapped is false. With no product arg, returns every resource type (backward compatible). */
92321
92696
  resourceTypes: Array<Scalars['String']['output']>;
92322
- /**
92323
- * Get all resource types together with the product slugs each is mapped to.
92324
- * Drives the permission-management UI (badges, product assignment). A resource
92325
- * type with an empty products list is cross-product ("All").
92326
- */
92697
+ /** Get all resource types together with the product slugs each is mapped to. Drives the permission-management UI (badges, product assignment). A resource type with an empty products list is cross-product ("All"). */
92327
92698
  resourceTypesWithProducts: Array<ResourceTypeProductInfo>;
92328
- /**
92329
- * List registered resources in a scope, optionally filtered by type, owner,
92330
- * active state, or a free-text search against `identifier`/`name`.
92331
- * Returns only resources registered via `registerResource`.
92332
- */
92699
+ /** List registered resources in a scope, optionally filtered by type, owner, active state, or a free-text search against `identifier`/`name`. Returns only resources registered via `registerResource`. */
92333
92700
  resources: Array<Resource>;
92334
92701
  /** Get resources by type across all workspaces (admin only) */
92335
92702
  resourcesByType: WorkspaceResourceList;
@@ -92613,11 +92980,15 @@ export type Query = {
92613
92980
  teamWorkPatterns: Array<TeamWorkPatternEntry>;
92614
92981
  /** Preview the cost of a session with a mentor before booking it -- does not create anything. Read access mirrors tecMentor (reading the mentor's rate). */
92615
92982
  tecCalculateSessionCost: TecSessionCostEstimate;
92616
- /** A single certificate by id, for the instructor/admin view (BOFF-3863). Same "list-all" gating as tecListCertificates. A learner reading their own certificate must use tecMyCertificate instead. */
92983
+ /** BOFF-10480: compare up to `limit` (default 200, max 200) records of each kind in the calling workspace with their canonical Buildmyiq records. Read-only; the background parity check repairs drift on its own schedule. */
92984
+ tecCanonicalLmsParity: TecCanonicalParityReport;
92985
+ /** A single certificate by id, for the instructor/admin view (BOFF-3863). Same "list-all" gating as tecListCertificates. A learner reading their own certificate must use buiMyCertificate instead. */
92617
92986
  tecCertificate?: Maybe<TecCertificate>;
92618
92987
  tecCourse?: Maybe<TecCourse>;
92619
- /** A single enrollment by id, for the instructor/admin view (BOFF-3863). Gated behind "list-all" like tecListEnrollments, because it can return any learner's enrollment. A learner reading their own enrollment must use tecMyEnrollment instead. Returns null for an id outside the workspace. */
92988
+ /** A single enrollment by id, for the instructor/admin view (BOFF-3863). Gated behind "list-all" like tecListEnrollments, because it can return any learner's enrollment. A learner reading their own enrollment must use buiMyEnrollment instead. Returns null for an id outside the workspace. */
92620
92989
  tecEnrollment?: Maybe<TecEnrollment>;
92990
+ /** Export the workspace's learner activity as xAPI statements (BOFF-4430): enrollments (registered), lesson completions (completed), course completions (completed), certificates (passed) and certificate revocations (voided). `since` is inclusive, `until` exclusive; `limit` defaults to 200 and is capped at 1000. Same "list-all" gate as tecListEnrollments, because it covers every learner in the workspace. */
92991
+ tecExportXapiStatements: TecXapiStatementPage;
92621
92992
  tecHackathon?: Maybe<TecHackathon>;
92622
92993
  /** Liveness/identity probe for the Technospam subgraph. */
92623
92994
  tecHealth: Scalars['String']['output'];
@@ -92625,10 +92996,10 @@ export type Query = {
92625
92996
  tecLesson?: Maybe<TecLesson>;
92626
92997
  /** Lesson-author view of a QUIZ lesson including the answer key (BOFF-4107). Gated on technospam-lesson update, the same permission that edits it, so a learner can never read the key. Empty for a lesson without a quiz. */
92627
92998
  tecLessonQuizKey: Array<TecQuizQuestionKey>;
92628
- /** Cross-learner, instructor/admin view of certificates — same "list-all" gating as tecListEnrollments. A learner viewing their own certificates must use tecMyCertificates instead. */
92999
+ /** Cross-learner, instructor/admin view of certificates — same "list-all" gating as tecListEnrollments. A learner viewing their own certificates must use buiMyCertificates(source: TECHNOSPAM) instead. */
92629
93000
  tecListCertificates: Array<TecCertificate>;
92630
93001
  tecListCourses: TecCourseConnection;
92631
- /** startDate/endDate filter enrollments by createdAt (inclusive), used to power the analytics page's date-range picker. This is the cross-learner, instructor/admin view — it returns every learner's enrollments in the workspace (optionally filtered to one learnerId). Gated behind the "list-all" action, which is NOT granted to the plain Viewer role by default. A learner viewing their own enrollments must use tecMyEnrollments instead. */
93002
+ /** startDate/endDate filter enrollments by createdAt (inclusive), used to power the analytics page's date-range picker. This is the cross-learner, instructor/admin view — it returns every learner's enrollments in the workspace (optionally filtered to one learnerId). Gated behind the "list-all" action, which is NOT granted to the plain Viewer role by default. A learner viewing their own enrollments must use buiMyEnrollments(source: TECHNOSPAM) instead. */
92632
93003
  tecListEnrollments: TecEnrollmentConnection;
92633
93004
  tecListHackathons: TecHackathonConnection;
92634
93005
  tecListLessons: TecLessonConnection;
@@ -92646,13 +93017,25 @@ export type Query = {
92646
93017
  tecListSubmissions: TecSubmissionConnection;
92647
93018
  tecListTeams: TecHackathonTeamConnection;
92648
93019
  tecMentor?: Maybe<TecMentor>;
92649
- /** One of the calling learner's own certificates (BOFF-3863). Self-scoped (Type B): owner-filtered by the authenticated actor; null otherwise. */
93020
+ /**
93021
+ * One of the calling learner's own certificates (BOFF-3863). Self-scoped (Type B): owner-filtered by the authenticated actor; null otherwise.
93022
+ * @deprecated Use buiMyCertificate(id: <TecCertificate.buiCertificateId>). Deprecated 2026-10-31 (BOFF-10481, OVL-24); removal no earlier than 2027-01-29.
93023
+ */
92650
93024
  tecMyCertificate?: Maybe<TecCertificate>;
92651
- /** The calling learner's own certificates. Self-scoped (Type C): identity comes from the authenticated actor, never from a client-supplied argument — the resolver forces learnerId = ctx.actor.id server-side. */
93025
+ /**
93026
+ * The calling learner's own certificates. Self-scoped (Type C): identity comes from the authenticated actor, never from a client-supplied argument — the resolver forces learnerId = ctx.actor.id server-side.
93027
+ * @deprecated Use buiMyCertificates(source: TECHNOSPAM); the Technospam view is on BuiCertificate.technospamCertificate and technospamRevokeReason. Deprecated 2026-10-31 (BOFF-10481, OVL-24); removal no earlier than 2027-01-29.
93028
+ */
92652
93029
  tecMyCertificates: Array<TecCertificate>;
92653
- /** One of the calling learner's own enrollments (BOFF-3863). Self-scoped (Type B): the id is a client argument, but the resolver owner-filters by the authenticated actor and returns null for an enrollment that does not exist or belongs to someone else, so existence is never leaked. */
93030
+ /**
93031
+ * One of the calling learner's own enrollments (BOFF-3863). Self-scoped (Type B): the id is a client argument, but the resolver owner-filters by the authenticated actor and returns null for an enrollment that does not exist or belongs to someone else, so existence is never leaked.
93032
+ * @deprecated Use buiMyEnrollment(id: <TecEnrollment.buiEnrollmentId>). Deprecated 2026-10-31 (BOFF-10481, OVL-24); removal no earlier than 2027-01-29.
93033
+ */
92654
93034
  tecMyEnrollment?: Maybe<TecEnrollment>;
92655
- /** The calling learner's own enrollments. Self-scoped (Type C): identity comes from the authenticated actor, never from a client-supplied argument — the resolver forces learnerId = ctx.actor.id server-side. */
93035
+ /**
93036
+ * The calling learner's own enrollments. Self-scoped (Type C): identity comes from the authenticated actor, never from a client-supplied argument — the resolver forces learnerId = ctx.actor.id server-side.
93037
+ * @deprecated Use buiMyEnrollments(source: TECHNOSPAM); the Technospam view is on BuiEnrollment.technospamEnrollment, technospamNextLessonId and technospamCompletions. Deprecated 2026-10-31 (BOFF-10481, OVL-24); removal no earlier than 2027-01-29.
93038
+ */
92656
93039
  tecMyEnrollments: TecEnrollmentConnection;
92657
93040
  /** Return the most recent acceptance of each type for the calling actor in the current workspace. Self-scoped: result is always filtered by ctx.actorId. */
92658
93041
  tecMyLegalAcceptances: Array<TecLegalAcceptance>;
@@ -92683,6 +93066,10 @@ export type Query = {
92683
93066
  tecSubmission?: Maybe<TecSubmission>;
92684
93067
  /** A single hackathon team by id (BOFF-3863). Same read gate as tecListTeams. Returns null for an id outside the caller's workspace. */
92685
93068
  tecTeam?: Maybe<TecHackathonTeam>;
93069
+ /** Public certificate verification for ATS partners and recruiters (BOFF-4430). Returns NOT_FOUND for an unknown serial. */
93070
+ tecVerifyCertificate: TecCertificateVerification;
93071
+ /** Batch variant of tecVerifyCertificate for ATS integrations that verify a whole candidate pipeline at once. At most 25 serials per call; duplicates are collapsed and results keep the request order. */
93072
+ tecVerifyCertificates: Array<TecCertificateVerification>;
92686
93073
  testParserExpression: ParserTestResult;
92687
93074
  theAsset?: Maybe<TheAsset>;
92688
93075
  theComplianceCert?: Maybe<TheComplianceCert>;
@@ -92706,6 +93093,8 @@ export type Query = {
92706
93093
  theSafetyDashboard: TheSafetyDashboard;
92707
93094
  theSafetyIncident?: Maybe<TheSafetyIncident>;
92708
93095
  thread: MessageConnection;
93096
+ /** Activation milestones for the calling workspace (BOFF-3450). */
93097
+ timeCampusActivation: TimeCampusActivation;
92709
93098
  /** The caller's currently ACTIVE focus session, if any. Self-scoped, no arg. */
92710
93099
  timeCampusActiveFocusSession?: Maybe<TimeCampusFocusSession>;
92711
93100
  timeCampusAdminWorkspaceState: TimeCampusAdminWorkspaceState;
@@ -92717,6 +93106,8 @@ export type Query = {
92717
93106
  /** The OAuth-backed sources a capture channel can pull from. */
92718
93107
  timeCampusCapturePullProviders: Array<TimeCampusCapturePullProvider>;
92719
93108
  timeCampusDataErasureRequests: Array<TimeCampusDataErasureRequest>;
93109
+ /** Current state of a TimeCampus export job started in the caller's workspace. Returns null when the job does not exist, belongs to another workspace, or is not a TimeCampus export. */
93110
+ timeCampusExportJob?: Maybe<TimeCampusExportJob>;
92720
93111
  timeCampusFeatureFlags: TimeCampusFeatureFlagList;
92721
93112
  /** Adaptive focus-block suggestions for one local day. `dayStart` is the instant of the caller's local midnight for that day (yesterday up to 14 days ahead). Ranked from the caller's own work patterns, meetings and past focus sessions; slots already accepted, snoozed or dismissed are excluded. */
92722
93113
  timeCampusFocusBlockSuggestions: Array<TimeCampusFocusBlockSuggestion>;
@@ -92955,6 +93346,12 @@ export type Query = {
92955
93346
  workPatternSummary: WorkPatternSummary;
92956
93347
  /** The calling actor's own work patterns. `userId` is accepted for backward compatibility but is neutralized in the resolver (resolveTargetUserId): any non-privileged actor requesting a different user's data is silently redirected back to their own. Managers use `teamWorkPatternSummary` / `teamWorkPatterns` for genuinely workspace-wide visibility. */
92957
93348
  workPatterns: Array<WorkPattern>;
93349
+ /**
93350
+ * The workspace's activity pause rules that have not expired (Phase C), for the graph executor's
93351
+ * rule check: [{ id, activityType, nodeType, workflowKey, reason, expiresAt }].
93352
+ * INTERNAL: Requires actorType SERVICE
93353
+ */
93354
+ workerActivityPauseRules: Scalars['JSON']['output'];
92958
93355
  /**
92959
93356
  * The agent an AI Agent node of a run names, or null when it names none.
92960
93357
  * INTERNAL: Requires actorType SERVICE
@@ -93017,6 +93414,8 @@ export type Query = {
93017
93414
  workerRunStatuses: Array<WorkerRunStatusEntry>;
93018
93415
  /** Get a single workflow by ID */
93019
93416
  workflow?: Maybe<FluidGridsWorkflow>;
93417
+ /** The workspace's activity pause rules that have not expired. */
93418
+ workflowActivityPauseRules: Array<WorkflowActivityPauseRule>;
93020
93419
  /** Get a workflow by its unique key */
93021
93420
  workflowByKey?: Maybe<FluidGridsWorkflow>;
93022
93421
  /** The code bundle of a version; null for a version without code. */
@@ -93124,6 +93523,8 @@ export type Query = {
93124
93523
  * (10 s budget). `enhanced` adds the structured `__enhanced_stack_trace`.
93125
93524
  */
93126
93525
  workflowRunStackTrace: WorkflowRunStackTrace;
93526
+ /** One update of a run, by its updateId (poll after updateWorkflowRun returns before the stage it asked for). */
93527
+ workflowRunUpdate: WorkflowUpdateResult;
93127
93528
  workflowRuns: WorkflowRunListResponse;
93128
93529
  /**
93129
93530
  * How many runs the workflowRuns list returns for `filter` (the same filters and the same
@@ -93147,6 +93548,14 @@ export type Query = {
93147
93548
  workflowStaticDataList: Array<WorkflowStaticDataRecord>;
93148
93549
  /** Get workflow summary with execution statistics */
93149
93550
  workflowSummary: WorkflowSummaryResponse;
93551
+ /** One test case, or null. */
93552
+ workflowTestCase?: Maybe<WorkflowTestCase>;
93553
+ /** The saved test cases of a workflow, in sort order. */
93554
+ workflowTestCases: Array<WorkflowTestCase>;
93555
+ /** One test-suite run and its per-case results, or null. People see the suite runs they started. */
93556
+ workflowTestRun?: Maybe<WorkflowTestRun>;
93557
+ /** The most recent test-suite runs of a workflow, newest first (1 to 50, default 20). */
93558
+ workflowTestRuns: Array<WorkflowTestRun>;
93150
93559
  /** Get a single variable by id (owner-filtered to the caller's workspace). */
93151
93560
  workflowVariable?: Maybe<WorkflowVariable>;
93152
93561
  /** List variables visible in the caller's workspace (optionally filtered to one project's scope). */
@@ -94115,6 +94524,10 @@ export type QueryBuiEnrollmentArgs = {
94115
94524
  id: Scalars['ID']['input'];
94116
94525
  };
94117
94526
  /** Base Query type with placeholder field. Extended by individual query files. */
94527
+ export type QueryBuiExternalSyncRecordsArgs = {
94528
+ input: BuiExternalSyncRecordsInput;
94529
+ };
94530
+ /** Base Query type with placeholder field. Extended by individual query files. */
94118
94531
  export type QueryBuiListAssessmentsArgs = {
94119
94532
  courseId: Scalars['ID']['input'];
94120
94533
  pagination?: InputMaybe<PaginationInput>;
@@ -94124,6 +94537,7 @@ export type QueryBuiListAssessmentsArgs = {
94124
94537
  export type QueryBuiListCertificatesArgs = {
94125
94538
  courseId?: InputMaybe<Scalars['ID']['input']>;
94126
94539
  pagination?: InputMaybe<PaginationInput>;
94540
+ source?: InputMaybe<BuiExternalSource>;
94127
94541
  };
94128
94542
  /** Base Query type with placeholder field. Extended by individual query files. */
94129
94543
  export type QueryBuiListCertificationsArgs = {
@@ -94140,12 +94554,14 @@ export type QueryBuiListCohortsArgs = {
94140
94554
  export type QueryBuiListCoursesArgs = {
94141
94555
  level?: InputMaybe<BuiCourseLevel>;
94142
94556
  pagination?: InputMaybe<PaginationInput>;
94557
+ source?: InputMaybe<BuiExternalSource>;
94143
94558
  status?: InputMaybe<BuiCourseStatus>;
94144
94559
  };
94145
94560
  /** Base Query type with placeholder field. Extended by individual query files. */
94146
94561
  export type QueryBuiListEnrollmentsArgs = {
94147
94562
  courseId?: InputMaybe<Scalars['ID']['input']>;
94148
94563
  pagination?: InputMaybe<PaginationInput>;
94564
+ source?: InputMaybe<BuiExternalSource>;
94149
94565
  status?: InputMaybe<BuiEnrollmentStatus>;
94150
94566
  };
94151
94567
  /** Base Query type with placeholder field. Extended by individual query files. */
@@ -94205,9 +94621,14 @@ export type QueryBuiLtiRosterArgs = {
94205
94621
  resourceLinkId: Scalars['ID']['input'];
94206
94622
  };
94207
94623
  /** Base Query type with placeholder field. Extended by individual query files. */
94624
+ export type QueryBuiMyCertificateArgs = {
94625
+ id: Scalars['ID']['input'];
94626
+ };
94627
+ /** Base Query type with placeholder field. Extended by individual query files. */
94208
94628
  export type QueryBuiMyCertificatesArgs = {
94209
94629
  courseId?: InputMaybe<Scalars['ID']['input']>;
94210
94630
  pagination?: InputMaybe<PaginationInput>;
94631
+ source?: InputMaybe<BuiExternalSource>;
94211
94632
  };
94212
94633
  /** Base Query type with placeholder field. Extended by individual query files. */
94213
94634
  export type QueryBuiMyCourseAccessArgs = {
@@ -94246,6 +94667,7 @@ export type QueryBuiMyEnrollmentArgs = {
94246
94667
  export type QueryBuiMyEnrollmentsArgs = {
94247
94668
  courseId?: InputMaybe<Scalars['ID']['input']>;
94248
94669
  pagination?: InputMaybe<PaginationInput>;
94670
+ source?: InputMaybe<BuiExternalSource>;
94249
94671
  status?: InputMaybe<BuiEnrollmentStatus>;
94250
94672
  };
94251
94673
  /** Base Query type with placeholder field. Extended by individual query files. */
@@ -98740,6 +99162,10 @@ export type QueryGovListServicesArgs = {
98740
99162
  status?: InputMaybe<GovServiceStatus>;
98741
99163
  };
98742
99164
  /** Base Query type with placeholder field. Extended by individual query files. */
99165
+ export type QueryGovMyApplicationArgs = {
99166
+ id: Scalars['ID']['input'];
99167
+ };
99168
+ /** Base Query type with placeholder field. Extended by individual query files. */
98743
99169
  export type QueryGovMyApplicationsArgs = {
98744
99170
  pagination?: InputMaybe<PaginationInput>;
98745
99171
  };
@@ -98756,6 +99182,10 @@ export type QueryGovMyFollowedJurisdictionsArgs = {
98756
99182
  pagination?: InputMaybe<PaginationInput>;
98757
99183
  };
98758
99184
  /** Base Query type with placeholder field. Extended by individual query files. */
99185
+ export type QueryGovMyGrievanceArgs = {
99186
+ id: Scalars['ID']['input'];
99187
+ };
99188
+ /** Base Query type with placeholder field. Extended by individual query files. */
98759
99189
  export type QueryGovMyGrievancesArgs = {
98760
99190
  pagination?: InputMaybe<PaginationInput>;
98761
99191
  };
@@ -98812,6 +99242,15 @@ export type QueryGovPublicAssetsArgs = {
98812
99242
  pagination?: InputMaybe<PaginationInput>;
98813
99243
  };
98814
99244
  /** Base Query type with placeholder field. Extended by individual query files. */
99245
+ export type QueryGovPublishedServiceArgs = {
99246
+ id: Scalars['ID']['input'];
99247
+ };
99248
+ /** Base Query type with placeholder field. Extended by individual query files. */
99249
+ export type QueryGovPublishedServicesArgs = {
99250
+ category?: InputMaybe<GovServiceCategory>;
99251
+ pagination?: InputMaybe<PaginationInput>;
99252
+ };
99253
+ /** Base Query type with placeholder field. Extended by individual query files. */
98815
99254
  export type QueryGovServiceArgs = {
98816
99255
  id: Scalars['ID']['input'];
98817
99256
  };
@@ -103167,6 +103606,14 @@ export type QueryQueryRetentionArgs = {
103167
103606
  input: RetentionQueryInput;
103168
103607
  };
103169
103608
  /** Base Query type with placeholder field. Extended by individual query files. */
103609
+ export type QueryQueryWorkflowRunArgs = {
103610
+ args?: InputMaybe<Scalars['JSON']['input']>;
103611
+ name: Scalars['String']['input'];
103612
+ rejectCondition?: InputMaybe<WorkflowQueryRejectCondition>;
103613
+ runId?: InputMaybe<Scalars['ID']['input']>;
103614
+ target?: InputMaybe<RunTargetInput>;
103615
+ };
103616
+ /** Base Query type with placeholder field. Extended by individual query files. */
103170
103617
  export type QueryRbacAnalyticsArgs = {
103171
103618
  dateRange?: InputMaybe<AnalyticsDateRangeInput>;
103172
103619
  scopeId: Scalars['String']['input'];
@@ -104144,6 +104591,10 @@ export type QueryTecCalculateSessionCostArgs = {
104144
104591
  mentorId: Scalars['ID']['input'];
104145
104592
  };
104146
104593
  /** Base Query type with placeholder field. Extended by individual query files. */
104594
+ export type QueryTecCanonicalLmsParityArgs = {
104595
+ limit?: InputMaybe<Scalars['Int']['input']>;
104596
+ };
104597
+ /** Base Query type with placeholder field. Extended by individual query files. */
104147
104598
  export type QueryTecCertificateArgs = {
104148
104599
  id: Scalars['ID']['input'];
104149
104600
  };
@@ -104156,6 +104607,13 @@ export type QueryTecEnrollmentArgs = {
104156
104607
  id: Scalars['ID']['input'];
104157
104608
  };
104158
104609
  /** Base Query type with placeholder field. Extended by individual query files. */
104610
+ export type QueryTecExportXapiStatementsArgs = {
104611
+ courseId?: InputMaybe<Scalars['ID']['input']>;
104612
+ limit?: InputMaybe<Scalars['Int']['input']>;
104613
+ since?: InputMaybe<Scalars['DateTime']['input']>;
104614
+ until?: InputMaybe<Scalars['DateTime']['input']>;
104615
+ };
104616
+ /** Base Query type with placeholder field. Extended by individual query files. */
104159
104617
  export type QueryTecHackathonArgs = {
104160
104618
  id: Scalars['ID']['input'];
104161
104619
  };
@@ -104328,6 +104786,14 @@ export type QueryTecTeamArgs = {
104328
104786
  id: Scalars['ID']['input'];
104329
104787
  };
104330
104788
  /** Base Query type with placeholder field. Extended by individual query files. */
104789
+ export type QueryTecVerifyCertificateArgs = {
104790
+ serial: Scalars['String']['input'];
104791
+ };
104792
+ /** Base Query type with placeholder field. Extended by individual query files. */
104793
+ export type QueryTecVerifyCertificatesArgs = {
104794
+ serials: Array<Scalars['String']['input']>;
104795
+ };
104796
+ /** Base Query type with placeholder field. Extended by individual query files. */
104331
104797
  export type QueryTestParserExpressionArgs = {
104332
104798
  input: TestParserInput;
104333
104799
  };
@@ -104461,6 +104927,10 @@ export type QueryTimeCampusDataErasureRequestsArgs = {
104461
104927
  workspaceId: Scalars['ID']['input'];
104462
104928
  };
104463
104929
  /** Base Query type with placeholder field. Extended by individual query files. */
104930
+ export type QueryTimeCampusExportJobArgs = {
104931
+ id: Scalars['ID']['input'];
104932
+ };
104933
+ /** Base Query type with placeholder field. Extended by individual query files. */
104464
104934
  export type QueryTimeCampusFeatureFlagsArgs = {
104465
104935
  workspaceId: Scalars['ID']['input'];
104466
104936
  };
@@ -105026,6 +105496,10 @@ export type QueryWorkPatternsArgs = {
105026
105496
  userId?: InputMaybe<Scalars['ID']['input']>;
105027
105497
  };
105028
105498
  /** Base Query type with placeholder field. Extended by individual query files. */
105499
+ export type QueryWorkerActivityPauseRulesArgs = {
105500
+ workspaceId: Scalars['ID']['input'];
105501
+ };
105502
+ /** Base Query type with placeholder field. Extended by individual query files. */
105029
105503
  export type QueryWorkerAgentProfileArgs = {
105030
105504
  nodeId: Scalars['String']['input'];
105031
105505
  runId: Scalars['ID']['input'];
@@ -105229,6 +105703,12 @@ export type QueryWorkflowRunStackTraceArgs = {
105229
105703
  target?: InputMaybe<RunTargetInput>;
105230
105704
  };
105231
105705
  /** Base Query type with placeholder field. Extended by individual query files. */
105706
+ export type QueryWorkflowRunUpdateArgs = {
105707
+ runId?: InputMaybe<Scalars['ID']['input']>;
105708
+ target?: InputMaybe<RunTargetInput>;
105709
+ updateId: Scalars['ID']['input'];
105710
+ };
105711
+ /** Base Query type with placeholder field. Extended by individual query files. */
105232
105712
  export type QueryWorkflowRunsArgs = {
105233
105713
  input: ListWorkflowRunsInput;
105234
105714
  };
@@ -105262,6 +105742,23 @@ export type QueryWorkflowSummaryArgs = {
105262
105742
  workflowKey: Scalars['String']['input'];
105263
105743
  };
105264
105744
  /** Base Query type with placeholder field. Extended by individual query files. */
105745
+ export type QueryWorkflowTestCaseArgs = {
105746
+ id: Scalars['ID']['input'];
105747
+ };
105748
+ /** Base Query type with placeholder field. Extended by individual query files. */
105749
+ export type QueryWorkflowTestCasesArgs = {
105750
+ workflowKey: Scalars['String']['input'];
105751
+ };
105752
+ /** Base Query type with placeholder field. Extended by individual query files. */
105753
+ export type QueryWorkflowTestRunArgs = {
105754
+ id: Scalars['ID']['input'];
105755
+ };
105756
+ /** Base Query type with placeholder field. Extended by individual query files. */
105757
+ export type QueryWorkflowTestRunsArgs = {
105758
+ limit?: InputMaybe<Scalars['Int']['input']>;
105759
+ workflowKey: Scalars['String']['input'];
105760
+ };
105761
+ /** Base Query type with placeholder field. Extended by individual query files. */
105265
105762
  export type QueryWorkflowVariableArgs = {
105266
105763
  id: Scalars['ID']['input'];
105267
105764
  };
@@ -106772,11 +107269,7 @@ export type ResolvedSecret = {
106772
107269
  value: Scalars['String']['output'];
106773
107270
  vaultId: Scalars['String']['output'];
106774
107271
  };
106775
- /**
106776
- * Registered resource with custom permission configurations.
106777
- * Resources are only registered when they have non-default permissions
106778
- * (overrides, visibility rules, or scoped assignments).
106779
- */
107272
+ /** Registered resource with custom permission configurations. Resources are only registered when they have non-default permissions (overrides, visibility rules, or scoped assignments). */
106780
107273
  export type Resource = {
106781
107274
  __typename?: 'Resource';
106782
107275
  children: Array<Resource>;
@@ -106826,22 +107319,11 @@ export declare enum ResourceBookingStatus {
106826
107319
  }
106827
107320
  /** Filter for querying resources */
106828
107321
  export type ResourceFilterInput = {
106829
- /**
106830
- * Defaults to `true` — only active resources are returned. Omit the field
106831
- * or pass `null` to use the default; pass `false` to find deactivated
106832
- * resources. To list both, issue two separate queries (`true` then
106833
- * `false`) and merge client-side; tracked in BOFF-2419.
106834
- */
107322
+ /** Defaults to `true` — only active resources are returned. Omit the field or pass `null` to use the default; pass `false` to find deactivated resources. To list both, issue two separate queries (`true` then `false`) and merge client-side; tracked in BOFF-2419. */
106835
107323
  isActive?: InputMaybe<Scalars['Boolean']['input']>;
106836
107324
  ownerId?: InputMaybe<Scalars['String']['input']>;
106837
107325
  resourceType?: InputMaybe<Scalars['String']['input']>;
106838
- /**
106839
- * Case-insensitive substring match against resource `identifier` and `name`.
106840
- * Blank or whitespace-only values are ignored. Input is capped at 200
106841
- * characters server-side (truncation happens before LIKE-escaping, so the
106842
- * cap applies to user content). PostgreSQL LIKE wildcards (`%`, `_`) and
106843
- * the escape character (`\\`) match literally, not as wildcards.
106844
- */
107326
+ /** Case-insensitive substring match against resource `identifier` and `name`. Blank or whitespace-only values are ignored. Input is capped at 200 characters server-side (truncation happens before LIKE-escaping, so the cap applies to user content). PostgreSQL LIKE wildcards (`%`, `_`) and the escape character (`\\`) match literally, not as wildcards. */
106845
107327
  search?: InputMaybe<Scalars['String']['input']>;
106846
107328
  };
106847
107329
  /** Resource limits snapshot for a specific point in time */
@@ -106907,10 +107389,7 @@ export type ResourcePlanListResponse = {
106907
107389
  items: Array<ResourcePlan>;
106908
107390
  total: Scalars['Int']['output'];
106909
107391
  };
106910
- /**
106911
- * A resource type (permission group) together with the products it is mapped to.
106912
- * An empty products list means the resource type is cross-product ("All").
106913
- */
107392
+ /** A resource type (permission group) together with the products it is mapped to. An empty products list means the resource type is cross-product ("All"). */
106914
107393
  export type ResourceTypeProductInfo = {
106915
107394
  __typename?: 'ResourceTypeProductInfo';
106916
107395
  /** Product slugs (PlatformProduct.slug) this resource type is relevant to. */
@@ -107400,10 +107879,7 @@ export type Role = {
107400
107879
  /** Role-level permission overrides */
107401
107880
  permissionOverrides: Array<RolePermissionOverride>;
107402
107881
  priority: Scalars['Int']['output'];
107403
- /**
107404
- * Product this role belongs to (PlatformProduct.slug). Null = cross-product /
107405
- * platform role (e.g. Workspace Owner, Editor, Viewer) shown under every product.
107406
- */
107882
+ /** Product this role belongs to (PlatformProduct.slug). Null = cross-product / platform role (e.g. Workspace Owner, Editor, Viewer) shown under every product. */
107407
107883
  productSlug?: Maybe<Scalars['String']['output']>;
107408
107884
  scopeId: Scalars['String']['output'];
107409
107885
  scopeType: Scalars['String']['output'];
@@ -107432,27 +107908,14 @@ export type RoleDefaultPermission = {
107432
107908
  resourceType: Scalars['String']['output'];
107433
107909
  roleId: Scalars['String']['output'];
107434
107910
  };
107435
- /**
107436
- * Filter for querying roles.
107437
- *
107438
- * Note: scopeId is intentionally not part of this filter — the workspace scope
107439
- * is derived from the request context (x-workspace-id) and cannot be overridden
107440
- * by the client. This prevents cross-workspace reads.
107441
- */
107911
+ /** Filter for querying roles. Note: scopeId is intentionally not part of this filter — the workspace scope is derived from the request context (x-workspace-id) and cannot be overridden by the client. This prevents cross-workspace reads. */
107442
107912
  export type RoleFilterInput = {
107443
- /**
107444
- * Whether to include cross-product/platform roles (productSlug = null) when a
107445
- * product filter is applied. Defaults to true. Ignored when product is unset.
107446
- */
107913
+ /** Whether to include cross-product/platform roles (productSlug = null) when a product filter is applied. Defaults to true. Ignored when product is unset. */
107447
107914
  includePlatformRoles?: InputMaybe<Scalars['Boolean']['input']>;
107448
107915
  includeSystem?: InputMaybe<Scalars['Boolean']['input']>;
107449
107916
  isSystem?: InputMaybe<Scalars['Boolean']['input']>;
107450
107917
  parentId?: InputMaybe<Scalars['ID']['input']>;
107451
- /**
107452
- * Filter roles by product (PlatformProduct.slug). When set, returns roles for
107453
- * that product. Cross-product/platform roles (productSlug = null) are included
107454
- * unless includePlatformRoles is explicitly false.
107455
- */
107918
+ /** Filter roles by product (PlatformProduct.slug). When set, returns roles for that product. Cross-product/platform roles (productSlug = null) are included unless includePlatformRoles is explicitly false. */
107456
107919
  product?: InputMaybe<Scalars['String']['input']>;
107457
107920
  };
107458
107921
  /** Input for checkRoleGrant: may the requester grant these roles in scopeId? */
@@ -107468,17 +107931,9 @@ export type RoleGrantCheckResult = {
107468
107931
  __typename?: 'RoleGrantCheckResult';
107469
107932
  /** True when setActorRoles would let the requester add every requested role */
107470
107933
  allowed: Scalars['Boolean']['output'];
107471
- /**
107472
- * Null when allowed; otherwise ROLE_NOT_FOUND | ROLE_SCOPE_MISMATCH | MAX_ROLES_EXCEEDED |
107473
- * ASSIGNMENT_CREATE_REQUIRED | PROTECTED_ROLE_OWNER_ONLY | ROLE_ESCALATION
107474
- */
107934
+ /** Null when allowed; otherwise ROLE_NOT_FOUND | ROLE_SCOPE_MISMATCH | MAX_ROLES_EXCEEDED | ASSIGNMENT_CREATE_REQUIRED | PROTECTED_ROLE_OWNER_ONLY | ROLE_ESCALATION */
107475
107935
  reasonCode?: Maybe<Scalars['String']['output']>;
107476
- /**
107477
- * The roles refused for reasonCode: the missing or out-of-scope roles, every requested role
107478
- * (ASSIGNMENT_CREATE_REQUIRED), the Owner/Admin roles (PROTECTED_ROLE_OWNER_ONLY), or the first
107479
- * role found above the requester's own authority (ROLE_ESCALATION). Empty when allowed or for
107480
- * MAX_ROLES_EXCEEDED.
107481
- */
107936
+ /** The roles refused for reasonCode: the missing or out-of-scope roles, every requested role (ASSIGNMENT_CREATE_REQUIRED), the Owner/Admin roles (PROTECTED_ROLE_OWNER_ONLY), or the first role found above the requester's own authority (ROLE_ESCALATION). Empty when allowed or for MAX_ROLES_EXCEEDED. */
107482
107937
  refusedRoleIds: Array<Scalars['ID']['output']>;
107483
107938
  };
107484
107939
  /** Basic role information */
@@ -107992,6 +108447,15 @@ export type RunVersioningOverride = {
107992
108447
  /** PINNED: the version whose bundle the run is pinned to. */
107993
108448
  version?: Maybe<Scalars['String']['output']>;
107994
108449
  };
108450
+ export type RunWorkflowTestsInput = {
108451
+ /** Run only these cases (enabled or not); an empty list runs none. Omitted: every enabled case. */
108452
+ caseIds?: InputMaybe<Array<Scalars['ID']['input']>>;
108453
+ /** Where the run was started from; default API. */
108454
+ source?: InputMaybe<WorkflowTestRunSource>;
108455
+ /** Version or alias to test; default the ACTIVE version, else the newest DRAFT. */
108456
+ version?: InputMaybe<Scalars['String']['input']>;
108457
+ workflowKey: Scalars['String']['input'];
108458
+ };
107995
108459
  export type RunningTimer = {
107996
108460
  __typename?: 'RunningTimer';
107997
108461
  elapsedSeconds: Scalars['Int']['output'];
@@ -111944,6 +112408,12 @@ export type StartWorkflowInput = {
111944
112408
  startDelay?: InputMaybe<Scalars['String']['input']>;
111945
112409
  /** One line shown in run lists and the run header (at most 200 characters). Parity. */
111946
112410
  summary?: InputMaybe<Scalars['String']['input']>;
112411
+ /**
112412
+ * Phase C update-with-start (needs fluidgrids.run-control): a new run gets the update before its
112413
+ * first workflow task; with idConflictPolicy USE_EXISTING the open run gets it as a normal update.
112414
+ * Refused together with startDelay.
112415
+ */
112416
+ update?: InputMaybe<StartWorkflowUpdateInput>;
111947
112417
  /** An exact version, an alias, or `active` (the default). */
111948
112418
  version?: InputMaybe<Scalars['String']['input']>;
111949
112419
  /**
@@ -111975,12 +112445,23 @@ export type StartWorkflowResult = {
111975
112445
  */
111976
112446
  existing: Scalars['Boolean']['output'];
111977
112447
  run: WorkflowRun;
112448
+ /** The update the start carried (update-with-start), at the stage the start waited for (Phase C). */
112449
+ updateResult?: Maybe<WorkflowUpdateResult>;
111978
112450
  };
111979
112451
  /** A signal delivered to a run as it starts (signal-with-start). */
111980
112452
  export type StartWorkflowSignalInput = {
111981
112453
  name: Scalars['String']['input'];
111982
112454
  payload?: InputMaybe<Scalars['JSON']['input']>;
111983
112455
  };
112456
+ /** Update-with-start: the update a startWorkflow sends with the run (Phase C, needs fluidgrids.run-control). */
112457
+ export type StartWorkflowUpdateInput = {
112458
+ args?: InputMaybe<Scalars['JSON']['input']>;
112459
+ name: Scalars['String']['input'];
112460
+ /** The update's idempotency id. */
112461
+ updateId: Scalars['ID']['input'];
112462
+ /** How long startWorkflow waits for it; ACCEPTED by default. */
112463
+ waitFor?: InputMaybe<WorkflowUpdateWaitFor>;
112464
+ };
111984
112465
  export declare enum StaticDataScope {
111985
112466
  Global = "GLOBAL",
111986
112467
  Node = "NODE"
@@ -115300,6 +115781,29 @@ export type TecBookSessionInput = {
115300
115781
  scheduledAt: Scalars['DateTime']['input'];
115301
115782
  topic: Scalars['String']['input'];
115302
115783
  };
115784
+ /** One Technospam LMS record whose canonical Buildmyiq record differs from it. */
115785
+ export type TecCanonicalParityMismatch = {
115786
+ __typename?: 'TecCanonicalParityMismatch';
115787
+ /** The fields that differ; `missing` when Buildmyiq holds no record for it. */
115788
+ fields: Array<Scalars['String']['output']>;
115789
+ /** The Technospam record id. */
115790
+ id: Scalars['ID']['output'];
115791
+ /** course, lesson, enrollment, lessonCompletion or certificate. */
115792
+ kind: Scalars['String']['output'];
115793
+ };
115794
+ /** Result of comparing this workspace's Technospam LMS records with the canonical Buildmyiq records they were written to. */
115795
+ export type TecCanonicalParityReport = {
115796
+ __typename?: 'TecCanonicalParityReport';
115797
+ /** Records compared. */
115798
+ checked: Scalars['Int']['output'];
115799
+ /** Batches whose canonical read failed (Buildmyiq unreachable); their records were not compared. */
115800
+ failed: Scalars['Int']['output'];
115801
+ /** Records whose canonical record differs or is missing. */
115802
+ mismatched: Scalars['Int']['output'];
115803
+ mismatches: Array<TecCanonicalParityMismatch>;
115804
+ /** Records skipped because a sync is already queued for them. */
115805
+ pending: Scalars['Int']['output'];
115806
+ };
115303
115807
  export type TecCertificate = {
115304
115808
  __typename?: 'TecCertificate';
115305
115809
  /** BOFF-3134: id of the canonical certificate in Buildmyiq; null until mirrored. */
@@ -115324,6 +115828,35 @@ export declare enum TecCertificateStatus {
115324
115828
  Issued = "ISSUED",
115325
115829
  Revoked = "REVOKED"
115326
115830
  }
115831
+ /** The public verification result for one certificate serial. Never includes the learner's identity or the revoke reason. */
115832
+ export type TecCertificateVerification = {
115833
+ __typename?: 'TecCertificateVerification';
115834
+ /** Course level (BEGINNER / INTERMEDIATE / ADVANCED); null when NOT_FOUND. */
115835
+ courseLevel?: Maybe<Scalars['String']['output']>;
115836
+ /** Title of the course the certificate was earned on; null when NOT_FOUND. */
115837
+ courseTitle?: Maybe<Scalars['String']['output']>;
115838
+ issuedAt?: Maybe<Scalars['DateTime']['output']>;
115839
+ /** Always "TechnoSpam" — the issuing product. */
115840
+ issuer: Scalars['String']['output'];
115841
+ revokedAt?: Maybe<Scalars['DateTime']['output']>;
115842
+ /** Final assessment score (0-100); null when NOT_FOUND. */
115843
+ score?: Maybe<Scalars['Int']['output']>;
115844
+ /** The serial that was checked, normalized (trimmed, upper-cased). */
115845
+ serial: Scalars['String']['output'];
115846
+ status: TecCertificateVerificationStatus;
115847
+ /** True only when status is VALID. */
115848
+ valid: Scalars['Boolean']['output'];
115849
+ /** When this verification was performed (server time). */
115850
+ verifiedAt: Scalars['DateTime']['output'];
115851
+ };
115852
+ export declare enum TecCertificateVerificationStatus {
115853
+ /** No certificate carries this serial. */
115854
+ NotFound = "NOT_FOUND",
115855
+ /** The serial belongs to a certificate that was revoked after issue. */
115856
+ Revoked = "REVOKED",
115857
+ /** The serial belongs to an issued certificate that has not been revoked. */
115858
+ Valid = "VALID"
115859
+ }
115327
115860
  export type TecCourse = {
115328
115861
  __typename?: 'TecCourse';
115329
115862
  /** BOFF-3134: id of the canonical course in Buildmyiq, the platform's LMS system of record. Null until the course has been mirrored there (normally within seconds of a write; the reconcile sweep catches up any backlog). */
@@ -115579,6 +116112,10 @@ export declare enum TecLegalAcceptanceType {
115579
116112
  }
115580
116113
  export type TecLesson = {
115581
116114
  __typename?: 'TecLesson';
116115
+ /** BOFF-10464: id of the canonical lesson in Buildmyiq, the platform's LMS system of record. Null until the lesson has been mirrored there. The canonical lesson carries the shared lesson fields only; runnable-code metadata, quiz questions and the free-tier lock stay on this type, and a premium-only lesson's body is not mirrored. */
116116
+ buiLessonId?: Maybe<Scalars['ID']['output']>;
116117
+ /** BOFF-10464: the canonical Buildmyiq lesson this lesson is mirrored to. */
116118
+ canonicalLesson?: Maybe<BuiLesson>;
115582
116119
  /** True when the calling learner has completed this lesson. */
115583
116120
  completedByMe: Scalars['Boolean']['output'];
115584
116121
  /** Null when `isLocked` is true (BOFF-4416 free-tier gating) -- the gate is enforced here at the API layer, not left to the client to respect. */
@@ -115632,6 +116169,10 @@ export type TecLessonCodeRun = {
115632
116169
  /** A lesson the learner finished inside an enrollment (BOFF-4107). */
115633
116170
  export type TecLessonCompletion = {
115634
116171
  __typename?: 'TecLessonCompletion';
116172
+ /** BOFF-10464: id of the canonical lesson progress in Buildmyiq; null until mirrored. */
116173
+ buiLessonProgressId?: Maybe<Scalars['ID']['output']>;
116174
+ /** BOFF-10464: the canonical Buildmyiq lesson progress this completion is mirrored to. */
116175
+ canonicalLessonProgress?: Maybe<BuiLessonProgress>;
115635
116176
  completedAt: Scalars['DateTime']['output'];
115636
116177
  enrollmentId: Scalars['ID']['output'];
115637
116178
  id: Scalars['ID']['output'];
@@ -116233,6 +116774,16 @@ export type TecUpdateStudyPlanStepStatusInput = {
116233
116774
  status: TecStudyPlanStepStatus;
116234
116775
  stepId: Scalars['ID']['input'];
116235
116776
  };
116777
+ /** One page of xAPI 1.0.3 statements. `statements` is an array of standard xAPI Statement objects ready to POST to an LRS `/statements` endpoint. When `hasMore` is true, request the next page with `since: nextSince` (statement ids are deterministic, so the one overlapping timestamp is de-duplicated by the LRS). */
116778
+ export type TecXapiStatementPage = {
116779
+ __typename?: 'TecXapiStatementPage';
116780
+ count: Scalars['Int']['output'];
116781
+ hasMore: Scalars['Boolean']['output'];
116782
+ nextSince?: Maybe<Scalars['DateTime']['output']>;
116783
+ statements: Array<Scalars['JSON']['output']>;
116784
+ /** xAPI version the statements conform to. */
116785
+ version: Scalars['String']['output'];
116786
+ };
116236
116787
  export declare enum TemplateCategory {
116237
116788
  CodeAssistant = "CODE_ASSISTANT",
116238
116789
  ContentCreation = "CONTENT_CREATION",
@@ -117032,6 +117583,39 @@ export type TimeApprovalRequest = {
117032
117583
  export type TimeApprovalRequestTimeEntriesArgs = {
117033
117584
  pagination?: InputMaybe<PaginationInput>;
117034
117585
  };
117586
+ /** The calling workspace's activation progress. */
117587
+ export type TimeCampusActivation = {
117588
+ __typename?: 'TimeCampusActivation';
117589
+ /** True once the core milestones (first project and first time entry) are reached. */
117590
+ activated: Scalars['Boolean']['output'];
117591
+ /** When the last core milestone was reached; null until activated. */
117592
+ activatedAt?: Maybe<Scalars['DateTime']['output']>;
117593
+ completedCount: Scalars['Int']['output'];
117594
+ milestones: Array<TimeCampusActivationMilestone>;
117595
+ totalCount: Scalars['Int']['output'];
117596
+ workspaceId: Scalars['ID']['output'];
117597
+ };
117598
+ /** One milestone's state in the calling workspace. */
117599
+ export type TimeCampusActivationMilestone = {
117600
+ __typename?: 'TimeCampusActivationMilestone';
117601
+ /** True once the workspace has ever reached the milestone. */
117602
+ completed: Scalars['Boolean']['output'];
117603
+ /** How many qualifying records the workspace has ever created. */
117604
+ count: Scalars['Int']['output'];
117605
+ /** When the milestone was first reached; null until then. */
117606
+ firstReachedAt?: Maybe<Scalars['DateTime']['output']>;
117607
+ key: TimeCampusActivationMilestoneKey;
117608
+ };
117609
+ /** A TimeCampus activation milestone: the first time a workspace does something that shows it is getting value from the product. */
117610
+ export declare enum TimeCampusActivationMilestoneKey {
117611
+ FirstApproval = "FIRST_APPROVAL",
117612
+ FirstClientPortalShare = "FIRST_CLIENT_PORTAL_SHARE",
117613
+ FirstExpense = "FIRST_EXPENSE",
117614
+ FirstInvoice = "FIRST_INVOICE",
117615
+ FirstPomodoro = "FIRST_POMODORO",
117616
+ FirstProject = "FIRST_PROJECT",
117617
+ FirstTimeEntry = "FIRST_TIME_ENTRY"
117618
+ }
117035
117619
  export type TimeCampusAdminMutationResult = {
117036
117620
  __typename?: 'TimeCampusAdminMutationResult';
117037
117621
  message: Scalars['String']['output'];
@@ -117375,11 +117959,18 @@ export declare enum TimeCampusExportFormat {
117375
117959
  }
117376
117960
  export type TimeCampusExportJob = {
117377
117961
  __typename?: 'TimeCampusExportJob';
117962
+ completedAt?: Maybe<Scalars['DateTime']['output']>;
117378
117963
  createdAt: Scalars['DateTime']['output'];
117964
+ downloadExpiresAt?: Maybe<Scalars['DateTime']['output']>;
117965
+ /** Pre-signed archive URL, present once the job is COMPLETED. */
117379
117966
  downloadUrl?: Maybe<Scalars['String']['output']>;
117380
117967
  entityTypes: Array<Scalars['String']['output']>;
117968
+ errorMessage?: Maybe<Scalars['String']['output']>;
117381
117969
  format: TimeCampusExportFormat;
117382
117970
  id: Scalars['ID']['output'];
117971
+ /** Completion percentage, 0-100. */
117972
+ progress?: Maybe<Scalars['Int']['output']>;
117973
+ /** CREATED, QUEUED, RUNNING, COMPLETED, FAILED, CANCELLED, EXPIRED or DELETED. */
117383
117974
  status: Scalars['String']['output'];
117384
117975
  workspaceId: Scalars['ID']['output'];
117385
117976
  };
@@ -117838,6 +118429,8 @@ export type TimeCampusLifeProfile = {
117838
118429
  hideRemainingWeeks: Scalars['Boolean']['output'];
117839
118430
  id: Scalars['ID']['output'];
117840
118431
  lifeExpectancyYears?: Maybe<Scalars['Int']['output']>;
118432
+ /** In-app theme picked on the settings page: light, dark, system, forest, ocean, sunset or high-contrast. Null until the user chooses one. */
118433
+ themePreference?: Maybe<Scalars['String']['output']>;
117841
118434
  timezone: Scalars['String']['output'];
117842
118435
  treatBreakAsSelfCare: Scalars['Boolean']['output'];
117843
118436
  updatedAt: Scalars['DateTime']['output'];
@@ -117853,6 +118446,8 @@ export type TimeCampusLifeProfileInput = {
117853
118446
  gridUnit?: InputMaybe<Scalars['String']['input']>;
117854
118447
  hideRemainingWeeks?: InputMaybe<Scalars['Boolean']['input']>;
117855
118448
  lifeExpectancyYears?: InputMaybe<Scalars['Int']['input']>;
118449
+ /** One of light, dark, system, forest, ocean, sunset or high-contrast; null clears the stored choice. */
118450
+ themePreference?: InputMaybe<Scalars['String']['input']>;
117856
118451
  timezone?: InputMaybe<Scalars['String']['input']>;
117857
118452
  treatBreakAsSelfCare?: InputMaybe<Scalars['Boolean']['input']>;
117858
118453
  weekStartsOn?: InputMaybe<Scalars['Int']['input']>;
@@ -117933,6 +118528,7 @@ export declare enum TimeCampusLoadEvidenceRefType {
117933
118528
  }
117934
118529
  export declare enum TimeCampusLoadFallbackReason {
117935
118530
  AiNotEnabled = "AI_NOT_ENABLED",
118531
+ CreditsExhausted = "CREDITS_EXHAUSTED",
117936
118532
  InsufficientData = "INSUFFICIENT_DATA",
117937
118533
  InvalidReply = "INVALID_REPLY",
117938
118534
  LowConfidence = "LOW_CONFIDENCE",
@@ -122299,10 +122895,7 @@ export type UpdateRoleInput = {
122299
122895
  name?: InputMaybe<Scalars['String']['input']>;
122300
122896
  parentId?: InputMaybe<Scalars['ID']['input']>;
122301
122897
  priority?: InputMaybe<Scalars['Int']['input']>;
122302
- /**
122303
- * Product this role belongs to (PlatformProduct.slug). Set to null only from
122304
- * admin-app flows that intentionally manage cross-product platform roles.
122305
- */
122898
+ /** Product this role belongs to (PlatformProduct.slug). Set to null only from admin-app flows that intentionally manage cross-product platform roles. */
122306
122899
  productSlug?: InputMaybe<Scalars['String']['input']>;
122307
122900
  };
122308
122901
  export type UpdateRouteInput = {
@@ -126873,6 +127466,33 @@ export type WorkerActionPolicyDecision = {
126873
127466
  */
126874
127467
  reason: Scalars['String']['output'];
126875
127468
  };
127469
+ /** Park the attempt in flight for asynchronous completion (Phase C, spec code-first 11 §2.2). */
127470
+ export type WorkerActivityParkInput = {
127471
+ activityId: Scalars['ID']['input'];
127472
+ attempt: Scalars['Int']['input'];
127473
+ /** When the park ends; default ASYNC_ACTIVITY_DEFAULT_TTL_SECONDS (30 days), capped by schedule-to-close. */
127474
+ deadline?: InputMaybe<Scalars['DateTime']['input']>;
127475
+ /** human, tool, policy (resumed by that request) or external (completed by token or by id). */
127476
+ reason: Scalars['String']['input'];
127477
+ /** The human-response, tool-approval or policy request id; required unless reason is external. */
127478
+ requestId?: InputMaybe<Scalars['String']['input']>;
127479
+ runId: Scalars['ID']['input'];
127480
+ /** State kept for the resume (at most 256 KiB). */
127481
+ state?: InputMaybe<Scalars['JSON']['input']>;
127482
+ };
127483
+ export type WorkerActivityParkResult = {
127484
+ __typename?: 'WorkerActivityParkResult';
127485
+ /**
127486
+ * False with a reason when the park is refused: FEATURE_DISABLED (fluidgrids.run-control is off; keep
127487
+ * the Phase B behaviour), RUN_CLOSED, NOT_FOUND, STALE_ATTEMPT, ALREADY_PARKED, CANCELLED,
127488
+ * INVALID_REASON, REQUEST_REQUIRED, STATE_TOO_LARGE or TOKEN_LIMIT.
127489
+ */
127490
+ accepted: Scalars['Boolean']['output'];
127491
+ deadline?: Maybe<Scalars['DateTime']['output']>;
127492
+ reason?: Maybe<Scalars['String']['output']>;
127493
+ /** The task token of an external park (shown once); null otherwise. */
127494
+ taskToken?: Maybe<Scalars['String']['output']>;
127495
+ };
126876
127496
  /** The agent an AI Agent node runs under, read from the run's stored definition. */
126877
127497
  export type WorkerAgentProfile = {
126878
127498
  __typename?: 'WorkerAgentProfile';
@@ -127246,6 +127866,11 @@ export type WorkerNodeState = {
127246
127866
  runId: Scalars['String']['output'];
127247
127867
  startTime?: Maybe<Scalars['DateTime']['output']>;
127248
127868
  status: NodeStatus;
127869
+ /**
127870
+ * True when a TEST run's test case mocked this node's connection call, so no
127871
+ * external call was made (BOFF-9960). Observational, like usedPinnedData.
127872
+ */
127873
+ usedMock?: Maybe<Scalars['Boolean']['output']>;
127249
127874
  /**
127250
127875
  * True when this node's output came from pinned data instead of a real call
127251
127876
  * (BOFF-7511). The executor decides this itself from the job message's own
@@ -127464,6 +128089,11 @@ export type WorkerUpdateNodeStateInput = {
127464
128089
  output?: InputMaybe<Scalars['JSON']['input']>;
127465
128090
  startTime?: InputMaybe<Scalars['DateTime']['input']>;
127466
128091
  status: NodeStatus;
128092
+ /**
128093
+ * Set true when the executor answered the node's connection call from a test
128094
+ * case's mock instead of calling it (BOFF-9960). Only ever true on a TEST run.
128095
+ */
128096
+ usedMock?: InputMaybe<Scalars['Boolean']['input']>;
127467
128097
  /**
127468
128098
  * Set true when the executor used pinned data instead of actually calling the
127469
128099
  * node (BOFF-7511).
@@ -127511,6 +128141,8 @@ export type WorkflowActivityFailureInput = {
127511
128141
  export type WorkflowActivityHeartbeatAck = {
127512
128142
  __typename?: 'WorkflowActivityHeartbeatAck';
127513
128143
  cancelRequested: Scalars['Boolean']['output'];
128144
+ pauseReason?: Maybe<Scalars['String']['output']>;
128145
+ /** Phase C (11 §2.28): the activity was paused; stop the attempt with ActivityPausedError. */
127514
128146
  paused: Scalars['Boolean']['output'];
127515
128147
  };
127516
128148
  /** The lease of one activity attempt. */
@@ -127520,6 +128152,11 @@ export type WorkflowActivityLease = {
127520
128152
  activityId: Scalars['ID']['output'];
127521
128153
  args?: Maybe<Scalars['JSON']['output']>;
127522
128154
  attempt: Scalars['Int']['output'];
128155
+ /**
128156
+ * Phase C (C-H4): SYNC for an ordinary attempt; RESUMED for an attempt dispatched again to finish a
128157
+ * park (workerParkActivityAsync), whose `resume` carries what finishes it.
128158
+ */
128159
+ completion: Scalars['String']['output'];
127523
128160
  /** Resolved connections: [{ connectionId, adapter }]. */
127524
128161
  connections?: Maybe<Scalars['JSON']['output']>;
127525
128162
  heartbeatDetails?: Maybe<Scalars['JSON']['output']>;
@@ -127538,6 +128175,8 @@ export type WorkflowActivityLease = {
127538
128175
  pinnedOutput?: Maybe<Scalars['JSON']['output']>;
127539
128176
  /** Why the lease was refused: NOT_FOUND, NOT_DURABLE, RUN_CLOSED, STALE_ATTEMPT, NOT_DUE, CANCELLED, NOT_ALLOWED. */
127540
128177
  reason?: Maybe<Scalars['String']['output']>;
128178
+ /** RESUMED only: { kind, requestId, payload, state }: the park's kind and request, the answer, the parked state. */
128179
+ resume?: Maybe<Scalars['JSON']['output']>;
127541
128180
  rootRunId: Scalars['ID']['output'];
127542
128181
  runId: Scalars['ID']['output'];
127543
128182
  runMode: RunMode;
@@ -127545,6 +128184,71 @@ export type WorkflowActivityLease = {
127545
128184
  scheduleToCloseDeadline?: Maybe<Scalars['DateTime']['output']>;
127546
128185
  startToCloseTimeoutMs: Scalars['Int']['output'];
127547
128186
  };
128187
+ /** New options for activities; they apply from the next attempt. */
128188
+ export type WorkflowActivityOptionsInput = {
128189
+ heartbeatTimeoutMs?: InputMaybe<Scalars['Int']['input']>;
128190
+ retry?: InputMaybe<WorkflowActivityRetryInput>;
128191
+ scheduleToCloseTimeoutMs?: InputMaybe<Scalars['Int']['input']>;
128192
+ scheduleToStartTimeoutMs?: InputMaybe<Scalars['Int']['input']>;
128193
+ startToCloseTimeoutMs?: InputMaybe<Scalars['Int']['input']>;
128194
+ };
128195
+ /** A workspace rule that pauses matching durable activities when they are scheduled or retried. */
128196
+ export type WorkflowActivityPauseRule = {
128197
+ __typename?: 'WorkflowActivityPauseRule';
128198
+ /** Matches the node type an activity runs (or a user activity's name). */
128199
+ activityType?: Maybe<Scalars['String']['output']>;
128200
+ createdAt: Scalars['DateTime']['output'];
128201
+ createdBy: Scalars['String']['output'];
128202
+ /** The rule ends (and unpauses what it paused) at this time; null: until deleted. */
128203
+ expiresAt?: Maybe<Scalars['DateTime']['output']>;
128204
+ id: Scalars['ID']['output'];
128205
+ nodeType?: Maybe<Scalars['String']['output']>;
128206
+ reason: Scalars['String']['output'];
128207
+ workflowKey?: Maybe<Scalars['String']['output']>;
128208
+ };
128209
+ /** A new pause rule: at least one of activityType, nodeType or workflowKey. */
128210
+ export type WorkflowActivityPauseRuleInput = {
128211
+ activityType?: InputMaybe<Scalars['String']['input']>;
128212
+ expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
128213
+ nodeType?: InputMaybe<Scalars['String']['input']>;
128214
+ reason: Scalars['String']['input'];
128215
+ workflowKey?: InputMaybe<Scalars['String']['input']>;
128216
+ };
128217
+ /** A retry policy change (each field optional). */
128218
+ export type WorkflowActivityRetryInput = {
128219
+ backoffMultiplier?: InputMaybe<Scalars['Float']['input']>;
128220
+ /** The longest delay, in milliseconds. */
128221
+ maxDelay?: InputMaybe<Scalars['Int']['input']>;
128222
+ maxRetries?: InputMaybe<Scalars['Int']['input']>;
128223
+ nonRetryableErrorTypes?: InputMaybe<Array<Scalars['String']['input']>>;
128224
+ /** Milliseconds before the first retry. */
128225
+ retryDelay?: InputMaybe<Scalars['Int']['input']>;
128226
+ retryOnErrorTypes?: InputMaybe<Array<ErrorType>>;
128227
+ };
128228
+ /** Which activities of a run an operation acts on: exactly one of the three. */
128229
+ export type WorkflowActivitySelectorInput = {
128230
+ activityId?: InputMaybe<Scalars['ID']['input']>;
128231
+ /** The node type the activities run. */
128232
+ activityType?: InputMaybe<Scalars['String']['input']>;
128233
+ /** Every open activity of the run. */
128234
+ all?: InputMaybe<Scalars['Boolean']['input']>;
128235
+ };
128236
+ /** A failure reported for an activity from outside the run (asynchronous completion). */
128237
+ export type WorkflowAsyncFailureInput = {
128238
+ details?: InputMaybe<Scalars['JSON']['input']>;
128239
+ errorType?: InputMaybe<ErrorType>;
128240
+ message: Scalars['String']['input'];
128241
+ nonRetryable?: InputMaybe<Scalars['Boolean']['input']>;
128242
+ /** The application failure type (an ApplicationError type). */
128243
+ type?: InputMaybe<Scalars['String']['input']>;
128244
+ };
128245
+ /** What a heartbeat of an asynchronously completed activity answers. */
128246
+ export type WorkflowAsyncHeartbeatAck = {
128247
+ __typename?: 'WorkflowAsyncHeartbeatAck';
128248
+ cancelRequested: Scalars['Boolean']['output'];
128249
+ pauseReason?: Maybe<Scalars['String']['output']>;
128250
+ paused: Scalars['Boolean']['output'];
128251
+ };
127548
128252
  /**
127549
128253
  * How a workflow version was written (BOFF-3720).
127550
128254
  * DIRECT: a person, with their own sign-in.
@@ -128471,6 +129175,25 @@ export declare enum WorkflowProposalStatus {
128471
129175
  /** The workflow changed after the proposal was made; ask for a new one */
128472
129176
  Stale = "STALE"
128473
129177
  }
129178
+ /** When queryWorkflowRun refuses instead of answering (Phase C, spec code-first 11 §2.21). */
129179
+ export declare enum WorkflowQueryRejectCondition {
129180
+ None = "NONE",
129181
+ /** Refuse when the run ended other than COMPLETED. */
129182
+ NotCompletedCleanly = "NOT_COMPLETED_CLEANLY",
129183
+ /** Refuse when the run has ended. */
129184
+ NotOpen = "NOT_OPEN"
129185
+ }
129186
+ /** One query's answer. */
129187
+ export type WorkflowQueryResult = {
129188
+ __typename?: 'WorkflowQueryResult';
129189
+ /** Why the query was refused or failed. */
129190
+ error?: Maybe<Scalars['String']['output']>;
129191
+ name: Scalars['String']['output'];
129192
+ /** No handler takes the name, or rejectCondition refused the query (`error` says why). */
129193
+ rejected: Scalars['Boolean']['output'];
129194
+ /** The handler's answer, following the run's data-privacy settings. */
129195
+ value?: Maybe<Scalars['JSON']['output']>;
129196
+ };
128474
129197
  /**
128475
129198
  * A gradual rollout (spec code-first 11 §2.27): `percent` % of the automatic starts of the workflow
128476
129199
  * (startWorkflow without a version, or `active`) run `toVersion` instead of the ACTIVE `fromVersion`.
@@ -128831,6 +129554,22 @@ export type WorkflowRunStackTrace = {
128831
129554
  /** Where each pending await of the workflow code is (`__stack_trace`); null for a closed run. */
128832
129555
  trace?: Maybe<Scalars['String']['output']>;
128833
129556
  };
129557
+ /**
129558
+ * The lifecycle of an update to a durable-function run (Phase C, spec code-first 11 §2.39). REJECTED
129559
+ * lives on the update only, never in the run's history.
129560
+ */
129561
+ export declare enum WorkflowRunUpdateStatus {
129562
+ /** The handler accepted it and is running. */
129563
+ Accepted = "ACCEPTED",
129564
+ /** Already in history (update-with-start); the next workflow task runs it. */
129565
+ Admitted = "ADMITTED",
129566
+ /** The handler finished: `result`, or `failure`. */
129567
+ Completed = "COMPLETED",
129568
+ /** Requested; the next workflow task receives it. */
129569
+ Pending = "PENDING",
129570
+ /** The validator refused it, or no handler answered it (UPDATE_NOT_HANDLED), or the run ended first (RUN_CLOSED). */
129571
+ Rejected = "REJECTED"
129572
+ }
128834
129573
  export type WorkflowScheduledJob = {
128835
129574
  __typename?: 'WorkflowScheduledJob';
128836
129575
  config?: Maybe<Scalars['JSON']['output']>;
@@ -128956,6 +129695,11 @@ export type WorkflowTaskLease = {
128956
129695
  buildId?: Maybe<Scalars['String']['output']>;
128957
129696
  bundle?: Maybe<WorkflowCodeBundleAccess>;
128958
129697
  cancelRequested: Scalars['Boolean']['output'];
129698
+ /**
129699
+ * Phase C (D-SDK1-32): the bundle features (code.features names) the workspace's flags enable, sent
129700
+ * as the task request's `features`. A bundle with interceptors runs only when they are listed.
129701
+ */
129702
+ features: Array<Scalars['String']['output']>;
128959
129703
  historyBytes: Scalars['Float']['output'];
128960
129704
  /** The history length the attempt works from; pass it back as expectedHistoryLength. */
128961
129705
  historyLength: Scalars['Int']['output'];
@@ -128975,6 +129719,11 @@ export type WorkflowTaskLease = {
128975
129719
  startedAt: Scalars['DateTime']['output'];
128976
129720
  taskId: Scalars['ID']['output'];
128977
129721
  taskQueue?: Maybe<Scalars['String']['output']>;
129722
+ /**
129723
+ * Phase C (C-ABI-H): the pending updates this task is delivered, each { updateId, name, args,
129724
+ * headers }: the task request's `updates`. Answering them is relief (accepted with any flag state).
129725
+ */
129726
+ updates: Array<Scalars['JSON']['output']>;
128978
129727
  version?: Maybe<Scalars['String']['output']>;
128979
129728
  workflowFn?: Maybe<Scalars['String']['output']>;
128980
129729
  workflowKey?: Maybe<Scalars['String']['output']>;
@@ -128989,11 +129738,208 @@ export type WorkflowTaskLocalActivityInput = {
128989
129738
  operation?: InputMaybe<Scalars['String']['input']>;
128990
129739
  summary?: InputMaybe<Scalars['String']['input']>;
128991
129740
  };
129741
+ export declare enum WorkflowTestAssertionOperator {
129742
+ /** A number lies between `min` and `max` (inclusive; either may be omitted). */
129743
+ Between = "BETWEEN",
129744
+ /** A string contains `expected`, or an array contains an element equal to it. */
129745
+ Contains = "CONTAINS",
129746
+ /** The value equals `expected` (deep equality). */
129747
+ Equals = "EQUALS",
129748
+ Exists = "EXISTS",
129749
+ /** An array has between `min` and `max` items (inclusive; either may be omitted). */
129750
+ ItemCount = "ITEM_COUNT",
129751
+ /** The value is valid against the JSON Schema in `expected`. */
129752
+ JsonSchema = "JSON_SCHEMA",
129753
+ /** A string matches the regular expression in `expected`. */
129754
+ Matches = "MATCHES",
129755
+ NotContains = "NOT_CONTAINS",
129756
+ NotEquals = "NOT_EQUALS",
129757
+ NotExists = "NOT_EXISTS"
129758
+ }
129759
+ /** One rule on a node's output. */
129760
+ export type WorkflowTestAssertionRule = {
129761
+ __typename?: 'WorkflowTestAssertionRule';
129762
+ expected?: Maybe<Scalars['JSON']['output']>;
129763
+ max?: Maybe<Scalars['Float']['output']>;
129764
+ /** Shown when the rule does not hold. */
129765
+ message?: Maybe<Scalars['String']['output']>;
129766
+ min?: Maybe<Scalars['Float']['output']>;
129767
+ operator: WorkflowTestAssertionOperator;
129768
+ /** Dotted path into the node output (e.g. `body.items.0.id`); null checks the whole output. */
129769
+ path?: Maybe<Scalars['String']['output']>;
129770
+ };
129771
+ export type WorkflowTestAssertionRuleInput = {
129772
+ expected?: InputMaybe<Scalars['JSON']['input']>;
129773
+ max?: InputMaybe<Scalars['Float']['input']>;
129774
+ message?: InputMaybe<Scalars['String']['input']>;
129775
+ min?: InputMaybe<Scalars['Float']['input']>;
129776
+ operator: WorkflowTestAssertionOperator;
129777
+ path?: InputMaybe<Scalars['String']['input']>;
129778
+ };
129779
+ export type WorkflowTestCase = {
129780
+ __typename?: 'WorkflowTestCase';
129781
+ connectionMocks: Array<WorkflowTestConnectionMock>;
129782
+ createdAt: Scalars['DateTime']['output'];
129783
+ createdBy: Scalars['String']['output'];
129784
+ description?: Maybe<Scalars['String']['output']>;
129785
+ enabled: Scalars['Boolean']['output'];
129786
+ expectations: Array<WorkflowTestNodeExpectation>;
129787
+ expectedStatus: WorkflowTestExpectedStatus;
129788
+ id: Scalars['ID']['output'];
129789
+ /** The case's result in the most recent of the workflow's last 20 finished suite runs that ran it; null when none of them did. */
129790
+ lastResult?: Maybe<WorkflowTestCaseResult>;
129791
+ name: Scalars['String']['output'];
129792
+ /** Pinned node outputs: { [nodeId]: { data: { ... } } }. */
129793
+ pinnedOutputs: Scalars['JSON']['output'];
129794
+ sortOrder: Scalars['Int']['output'];
129795
+ triggerData: Scalars['JSON']['output'];
129796
+ /** The node the run starts on; null starts on the workflow's single entry node. */
129797
+ triggerNodeId?: Maybe<Scalars['String']['output']>;
129798
+ updatedAt: Scalars['DateTime']['output'];
129799
+ updatedBy?: Maybe<Scalars['String']['output']>;
129800
+ workflowKey: Scalars['String']['output'];
129801
+ };
129802
+ /**
129803
+ * A whole test case. Updating replaces every field. At most 256 KiB of JSON per
129804
+ * case, 100 mocks, 100 pinned nodes and 100 checked nodes.
129805
+ */
129806
+ export type WorkflowTestCaseInput = {
129807
+ connectionMocks?: InputMaybe<Array<WorkflowTestConnectionMockInput>>;
129808
+ description?: InputMaybe<Scalars['String']['input']>;
129809
+ /** Default true; disabled cases are skipped by runWorkflowTests. */
129810
+ enabled?: InputMaybe<Scalars['Boolean']['input']>;
129811
+ expectations?: InputMaybe<Array<WorkflowTestNodeExpectationInput>>;
129812
+ /** Default COMPLETED. */
129813
+ expectedStatus?: InputMaybe<WorkflowTestExpectedStatus>;
129814
+ /** 1 to 200 characters, unique (ignoring case) among the workflow's test cases. */
129815
+ name: Scalars['String']['input'];
129816
+ /** { [nodeId]: { data: { ... } } } */
129817
+ pinnedOutputs?: InputMaybe<Scalars['JSON']['input']>;
129818
+ sortOrder?: InputMaybe<Scalars['Int']['input']>;
129819
+ triggerData?: InputMaybe<Scalars['JSON']['input']>;
129820
+ triggerNodeId?: InputMaybe<Scalars['String']['input']>;
129821
+ };
129822
+ export type WorkflowTestCaseResult = {
129823
+ __typename?: 'WorkflowTestCaseResult';
129824
+ caseId: Scalars['ID']['output'];
129825
+ caseName: Scalars['String']['output'];
129826
+ completedAt?: Maybe<Scalars['DateTime']['output']>;
129827
+ failures: Array<WorkflowTestFailure>;
129828
+ /** The TEST run of the case; null when it could not start. */
129829
+ runId?: Maybe<Scalars['ID']['output']>;
129830
+ runStatus?: Maybe<RunStatus>;
129831
+ status: WorkflowTestRunStatus;
129832
+ };
129833
+ /**
129834
+ * A canned connection result: the node returns `response` (or fails with `error`)
129835
+ * instead of calling its connection. `operation` narrows it to one operation.
129836
+ */
129837
+ export type WorkflowTestConnectionMock = {
129838
+ __typename?: 'WorkflowTestConnectionMock';
129839
+ error?: Maybe<WorkflowTestMockError>;
129840
+ nodeId: Scalars['String']['output'];
129841
+ operation?: Maybe<Scalars['String']['output']>;
129842
+ response?: Maybe<Scalars['JSON']['output']>;
129843
+ };
129844
+ export type WorkflowTestConnectionMockInput = {
129845
+ error?: InputMaybe<WorkflowTestMockErrorInput>;
129846
+ nodeId: Scalars['String']['input'];
129847
+ operation?: InputMaybe<Scalars['String']['input']>;
129848
+ /** Set exactly one of response and error. */
129849
+ response?: InputMaybe<Scalars['JSON']['input']>;
129850
+ };
129851
+ /** The run outcome a test case expects. */
129852
+ export declare enum WorkflowTestExpectedStatus {
129853
+ Completed = "COMPLETED",
129854
+ Failed = "FAILED"
129855
+ }
129856
+ export type WorkflowTestFailure = {
129857
+ __typename?: 'WorkflowTestFailure';
129858
+ /** ASSERTION_FAILED, NODE_FAILED, NODE_TIMEOUT, RUN_FAILED, UNEXPECTED_STATUS, EXPECTED_NODE_NOT_RUN, RUN_NOT_STARTED, UNKNOWN_NODE, RUN_CANCELLED, RUN_TERMINATED, RUN_MISSING or SUITE_TIMEOUT. */
129859
+ code: Scalars['String']['output'];
129860
+ /** For ASSERTION_FAILED, the rules that did not hold; the node's output on the run holds every rule result. */
129861
+ message: Scalars['String']['output'];
129862
+ nodeId?: Maybe<Scalars['String']['output']>;
129863
+ };
129864
+ export type WorkflowTestMockError = {
129865
+ __typename?: 'WorkflowTestMockError';
129866
+ errorType?: Maybe<ErrorType>;
129867
+ message: Scalars['String']['output'];
129868
+ };
129869
+ export type WorkflowTestMockErrorInput = {
129870
+ errorType?: InputMaybe<ErrorType>;
129871
+ message: Scalars['String']['input'];
129872
+ };
129873
+ /** The rules a test case checks on one node's output when the node completes. */
129874
+ export type WorkflowTestNodeExpectation = {
129875
+ __typename?: 'WorkflowTestNodeExpectation';
129876
+ nodeId: Scalars['String']['output'];
129877
+ rules: Array<WorkflowTestAssertionRule>;
129878
+ };
129879
+ export type WorkflowTestNodeExpectationInput = {
129880
+ nodeId: Scalars['String']['input'];
129881
+ /** 1 to 50 rules. */
129882
+ rules: Array<WorkflowTestAssertionRuleInput>;
129883
+ };
129884
+ export type WorkflowTestRun = {
129885
+ __typename?: 'WorkflowTestRun';
129886
+ completedAt?: Maybe<Scalars['DateTime']['output']>;
129887
+ id: Scalars['ID']['output'];
129888
+ results: Array<WorkflowTestCaseResult>;
129889
+ source: WorkflowTestRunSource;
129890
+ startedAt: Scalars['DateTime']['output'];
129891
+ status: WorkflowTestRunStatus;
129892
+ summary: WorkflowTestRunSummary;
129893
+ triggeredBy: Scalars['String']['output'];
129894
+ version: Scalars['String']['output'];
129895
+ workflowKey: Scalars['String']['output'];
129896
+ };
129897
+ export declare enum WorkflowTestRunSource {
129898
+ Api = "API",
129899
+ Cli = "CLI",
129900
+ Ui = "UI"
129901
+ }
129902
+ export declare enum WorkflowTestRunStatus {
129903
+ /** No case failed, but at least one could not run (not started, cancelled or timed out). */
129904
+ Error = "ERROR",
129905
+ /** At least one case failed: an assertion did not hold or the run did not end as expected. */
129906
+ Failed = "FAILED",
129907
+ /** Every case passed. */
129908
+ Passed = "PASSED",
129909
+ /** Started; no case run has begun yet. */
129910
+ Pending = "PENDING",
129911
+ /** At least one case run has not finished. */
129912
+ Running = "RUNNING"
129913
+ }
129914
+ export type WorkflowTestRunSummary = {
129915
+ __typename?: 'WorkflowTestRunSummary';
129916
+ errored: Scalars['Int']['output'];
129917
+ failed: Scalars['Int']['output'];
129918
+ passed: Scalars['Int']['output'];
129919
+ /** Cases whose run has not finished. */
129920
+ pending: Scalars['Int']['output'];
129921
+ total: Scalars['Int']['output'];
129922
+ };
128992
129923
  export type WorkflowTimeRange = {
128993
129924
  __typename?: 'WorkflowTimeRange';
128994
129925
  from: Scalars['String']['output'];
128995
129926
  to: Scalars['String']['output'];
128996
129927
  };
129928
+ /** One update of a durable-function run. */
129929
+ export type WorkflowUpdateResult = {
129930
+ __typename?: 'WorkflowUpdateResult';
129931
+ acceptedAt?: Maybe<Scalars['DateTime']['output']>;
129932
+ completedAt?: Maybe<Scalars['DateTime']['output']>;
129933
+ createdAt: Scalars['DateTime']['output'];
129934
+ /** The failure of a REJECTED update, or of a COMPLETED one whose handler failed. */
129935
+ failure?: Maybe<Scalars['JSON']['output']>;
129936
+ name: Scalars['String']['output'];
129937
+ /** The handler's result (COMPLETED), following the run's data-privacy settings. */
129938
+ result?: Maybe<Scalars['JSON']['output']>;
129939
+ runId: Scalars['ID']['output'];
129940
+ status: WorkflowRunUpdateStatus;
129941
+ updateId: Scalars['ID']['output'];
129942
+ };
128997
129943
  export type WorkflowUpdateScheduledJobInput = {
128998
129944
  config?: InputMaybe<Scalars['JSON']['input']>;
128999
129945
  enabled?: InputMaybe<Scalars['Boolean']['input']>;
@@ -129001,6 +129947,13 @@ export type WorkflowUpdateScheduledJobInput = {
129001
129947
  schedule?: InputMaybe<Scalars['String']['input']>;
129002
129948
  timezone?: InputMaybe<Scalars['String']['input']>;
129003
129949
  };
129950
+ /** How long updateWorkflowRun waits before it answers (Phase C). */
129951
+ export declare enum WorkflowUpdateWaitFor {
129952
+ /** Until a workflow task accepts or rejects the update. */
129953
+ Accepted = "ACCEPTED",
129954
+ /** Until the update completes (or is rejected). */
129955
+ Completed = "COMPLETED"
129956
+ }
129004
129957
  /**
129005
129958
  * One validation finding. `code` is stable (for example `edge.sourceNotFound`,
129006
129959
  * `interface.invalidSchema`, `strict.legacyMirror`); `message` is English.