@contractspec/example.learning-journey-platform-tour 3.7.19 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,12 @@
1
- export declare const PlatformTourTrackModel: import("@contractspec/lib.schema").SchemaModel<{
1
+ export declare const PlatformJourneyTrackModel: import("@contractspec/lib.schema").SchemaModel<{
2
2
  id: {
3
3
  type: import("@contractspec/lib.schema").FieldType<string, string>;
4
4
  isOptional: false;
5
5
  };
6
+ productId: {
7
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
8
+ isOptional: true;
9
+ };
6
10
  name: {
7
11
  type: import("@contractspec/lib.schema").FieldType<string, string>;
8
12
  isOptional: false;
@@ -11,24 +15,49 @@ export declare const PlatformTourTrackModel: import("@contractspec/lib.schema").
11
15
  type: import("@contractspec/lib.schema").FieldType<string, string>;
12
16
  isOptional: true;
13
17
  };
18
+ targetUserSegment: {
19
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
20
+ isOptional: true;
21
+ };
22
+ targetRole: {
23
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
24
+ isOptional: true;
25
+ };
14
26
  totalXp: {
15
27
  type: import("@contractspec/lib.schema").FieldType<number, number>;
16
28
  isOptional: true;
17
29
  };
18
- completionXpBonus: {
19
- type: import("@contractspec/lib.schema").FieldType<number, number>;
30
+ isActive: {
31
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
20
32
  isOptional: true;
21
33
  };
22
- completionBadgeKey: {
23
- type: import("@contractspec/lib.schema").FieldType<string, string>;
34
+ isRequired: {
35
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
24
36
  isOptional: true;
25
37
  };
26
- streakHoursWindow: {
27
- type: import("@contractspec/lib.schema").FieldType<number, number>;
38
+ canSkip: {
39
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
28
40
  isOptional: true;
29
41
  };
30
- streakBonusXp: {
31
- type: import("@contractspec/lib.schema").FieldType<number, number>;
42
+ streakRule: {
43
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
44
+ isOptional: true;
45
+ };
46
+ completionRewards: {
47
+ type: import("@contractspec/lib.schema").SchemaModel<{
48
+ badgeKey: {
49
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
50
+ isOptional: true;
51
+ };
52
+ xp: {
53
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
54
+ isOptional: true;
55
+ };
56
+ }>;
57
+ isOptional: true;
58
+ };
59
+ metadata: {
60
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
32
61
  isOptional: true;
33
62
  };
34
63
  steps: {
@@ -45,20 +74,126 @@ export declare const PlatformTourTrackModel: import("@contractspec/lib.schema").
45
74
  type: import("@contractspec/lib.schema").FieldType<string, string>;
46
75
  isOptional: true;
47
76
  };
48
- completionEvent: {
77
+ instructions: {
49
78
  type: import("@contractspec/lib.schema").FieldType<string, string>;
79
+ isOptional: true;
80
+ };
81
+ helpUrl: {
82
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
83
+ isOptional: true;
84
+ };
85
+ order: {
86
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
87
+ isOptional: true;
88
+ };
89
+ completion: {
90
+ type: import("@contractspec/lib.schema").SchemaModel<{
91
+ kind: {
92
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
93
+ isOptional: true;
94
+ };
95
+ eventName: {
96
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
97
+ isOptional: false;
98
+ };
99
+ eventVersion: {
100
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
101
+ isOptional: true;
102
+ };
103
+ sourceModule: {
104
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
105
+ isOptional: true;
106
+ };
107
+ payloadFilter: {
108
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
109
+ isOptional: true;
110
+ };
111
+ atLeast: {
112
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
113
+ isOptional: true;
114
+ };
115
+ withinHours: {
116
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
117
+ isOptional: true;
118
+ };
119
+ withinHoursOfStart: {
120
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
121
+ isOptional: true;
122
+ };
123
+ availableAfterHours: {
124
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
125
+ isOptional: true;
126
+ };
127
+ skillIdField: {
128
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
129
+ isOptional: true;
130
+ };
131
+ masteryField: {
132
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
133
+ isOptional: true;
134
+ };
135
+ minimumMastery: {
136
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
137
+ isOptional: true;
138
+ };
139
+ requiredCount: {
140
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
141
+ isOptional: true;
142
+ };
143
+ }>;
50
144
  isOptional: false;
51
145
  };
52
- sourceModule: {
146
+ availability: {
147
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
148
+ isOptional: true;
149
+ };
150
+ prerequisites: {
151
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
152
+ isOptional: true;
153
+ };
154
+ prerequisiteMode: {
53
155
  type: import("@contractspec/lib.schema").FieldType<string, string>;
54
156
  isOptional: true;
55
157
  };
158
+ branches: {
159
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
160
+ isOptional: true;
161
+ };
162
+ reward: {
163
+ type: import("@contractspec/lib.schema").SchemaModel<{
164
+ badgeKey: {
165
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
166
+ isOptional: true;
167
+ };
168
+ xp: {
169
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
170
+ isOptional: true;
171
+ };
172
+ }>;
173
+ isOptional: true;
174
+ };
56
175
  xpReward: {
57
176
  type: import("@contractspec/lib.schema").FieldType<number, number>;
58
177
  isOptional: true;
59
178
  };
60
- order: {
61
- type: import("@contractspec/lib.schema").FieldType<number, number>;
179
+ isRequired: {
180
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
181
+ isOptional: true;
182
+ };
183
+ canSkip: {
184
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
185
+ isOptional: true;
186
+ };
187
+ actionUrl: {
188
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
189
+ isOptional: true;
190
+ };
191
+ actionLabel: {
192
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
193
+ isOptional: true;
194
+ };
195
+ metadata: {
196
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
62
197
  isOptional: true;
63
198
  };
64
199
  }>;
@@ -73,6 +208,10 @@ export declare const GetPlatformTourTrack: import("@contractspec/lib.contracts-s
73
208
  type: import("@contractspec/lib.schema").FieldType<string, string>;
74
209
  isOptional: false;
75
210
  };
211
+ productId: {
212
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
213
+ isOptional: true;
214
+ };
76
215
  name: {
77
216
  type: import("@contractspec/lib.schema").FieldType<string, string>;
78
217
  isOptional: false;
@@ -81,24 +220,49 @@ export declare const GetPlatformTourTrack: import("@contractspec/lib.contracts-s
81
220
  type: import("@contractspec/lib.schema").FieldType<string, string>;
82
221
  isOptional: true;
83
222
  };
223
+ targetUserSegment: {
224
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
225
+ isOptional: true;
226
+ };
227
+ targetRole: {
228
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
229
+ isOptional: true;
230
+ };
84
231
  totalXp: {
85
232
  type: import("@contractspec/lib.schema").FieldType<number, number>;
86
233
  isOptional: true;
87
234
  };
88
- completionXpBonus: {
89
- type: import("@contractspec/lib.schema").FieldType<number, number>;
235
+ isActive: {
236
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
90
237
  isOptional: true;
91
238
  };
92
- completionBadgeKey: {
93
- type: import("@contractspec/lib.schema").FieldType<string, string>;
239
+ isRequired: {
240
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
94
241
  isOptional: true;
95
242
  };
96
- streakHoursWindow: {
97
- type: import("@contractspec/lib.schema").FieldType<number, number>;
243
+ canSkip: {
244
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
98
245
  isOptional: true;
99
246
  };
100
- streakBonusXp: {
101
- type: import("@contractspec/lib.schema").FieldType<number, number>;
247
+ streakRule: {
248
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
249
+ isOptional: true;
250
+ };
251
+ completionRewards: {
252
+ type: import("@contractspec/lib.schema").SchemaModel<{
253
+ badgeKey: {
254
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
255
+ isOptional: true;
256
+ };
257
+ xp: {
258
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
259
+ isOptional: true;
260
+ };
261
+ }>;
262
+ isOptional: true;
263
+ };
264
+ metadata: {
265
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
102
266
  isOptional: true;
103
267
  };
104
268
  steps: {
@@ -115,20 +279,126 @@ export declare const GetPlatformTourTrack: import("@contractspec/lib.contracts-s
115
279
  type: import("@contractspec/lib.schema").FieldType<string, string>;
116
280
  isOptional: true;
117
281
  };
118
- completionEvent: {
282
+ instructions: {
283
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
284
+ isOptional: true;
285
+ };
286
+ helpUrl: {
119
287
  type: import("@contractspec/lib.schema").FieldType<string, string>;
288
+ isOptional: true;
289
+ };
290
+ order: {
291
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
292
+ isOptional: true;
293
+ };
294
+ completion: {
295
+ type: import("@contractspec/lib.schema").SchemaModel<{
296
+ kind: {
297
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
298
+ isOptional: true;
299
+ };
300
+ eventName: {
301
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
302
+ isOptional: false;
303
+ };
304
+ eventVersion: {
305
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
306
+ isOptional: true;
307
+ };
308
+ sourceModule: {
309
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
310
+ isOptional: true;
311
+ };
312
+ payloadFilter: {
313
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
314
+ isOptional: true;
315
+ };
316
+ atLeast: {
317
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
318
+ isOptional: true;
319
+ };
320
+ withinHours: {
321
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
322
+ isOptional: true;
323
+ };
324
+ withinHoursOfStart: {
325
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
326
+ isOptional: true;
327
+ };
328
+ availableAfterHours: {
329
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
330
+ isOptional: true;
331
+ };
332
+ skillIdField: {
333
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
334
+ isOptional: true;
335
+ };
336
+ masteryField: {
337
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
338
+ isOptional: true;
339
+ };
340
+ minimumMastery: {
341
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
342
+ isOptional: true;
343
+ };
344
+ requiredCount: {
345
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
346
+ isOptional: true;
347
+ };
348
+ }>;
120
349
  isOptional: false;
121
350
  };
122
- sourceModule: {
351
+ availability: {
352
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
353
+ isOptional: true;
354
+ };
355
+ prerequisites: {
356
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
357
+ isOptional: true;
358
+ };
359
+ prerequisiteMode: {
123
360
  type: import("@contractspec/lib.schema").FieldType<string, string>;
124
361
  isOptional: true;
125
362
  };
363
+ branches: {
364
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
365
+ isOptional: true;
366
+ };
367
+ reward: {
368
+ type: import("@contractspec/lib.schema").SchemaModel<{
369
+ badgeKey: {
370
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
371
+ isOptional: true;
372
+ };
373
+ xp: {
374
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
375
+ isOptional: true;
376
+ };
377
+ }>;
378
+ isOptional: true;
379
+ };
126
380
  xpReward: {
127
381
  type: import("@contractspec/lib.schema").FieldType<number, number>;
128
382
  isOptional: true;
129
383
  };
130
- order: {
131
- type: import("@contractspec/lib.schema").FieldType<number, number>;
384
+ isRequired: {
385
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
386
+ isOptional: true;
387
+ };
388
+ canSkip: {
389
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
390
+ isOptional: true;
391
+ };
392
+ actionUrl: {
393
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
394
+ isOptional: true;
395
+ };
396
+ actionLabel: {
397
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
398
+ isOptional: true;
399
+ };
400
+ metadata: {
401
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
132
402
  isOptional: true;
133
403
  };
134
404
  }>;
@@ -170,6 +440,10 @@ export declare const platformTourContracts: {
170
440
  type: import("@contractspec/lib.schema").FieldType<string, string>;
171
441
  isOptional: false;
172
442
  };
443
+ productId: {
444
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
445
+ isOptional: true;
446
+ };
173
447
  name: {
174
448
  type: import("@contractspec/lib.schema").FieldType<string, string>;
175
449
  isOptional: false;
@@ -178,24 +452,49 @@ export declare const platformTourContracts: {
178
452
  type: import("@contractspec/lib.schema").FieldType<string, string>;
179
453
  isOptional: true;
180
454
  };
455
+ targetUserSegment: {
456
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
457
+ isOptional: true;
458
+ };
459
+ targetRole: {
460
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
461
+ isOptional: true;
462
+ };
181
463
  totalXp: {
182
464
  type: import("@contractspec/lib.schema").FieldType<number, number>;
183
465
  isOptional: true;
184
466
  };
185
- completionXpBonus: {
186
- type: import("@contractspec/lib.schema").FieldType<number, number>;
467
+ isActive: {
468
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
187
469
  isOptional: true;
188
470
  };
189
- completionBadgeKey: {
190
- type: import("@contractspec/lib.schema").FieldType<string, string>;
471
+ isRequired: {
472
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
191
473
  isOptional: true;
192
474
  };
193
- streakHoursWindow: {
194
- type: import("@contractspec/lib.schema").FieldType<number, number>;
475
+ canSkip: {
476
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
195
477
  isOptional: true;
196
478
  };
197
- streakBonusXp: {
198
- type: import("@contractspec/lib.schema").FieldType<number, number>;
479
+ streakRule: {
480
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
481
+ isOptional: true;
482
+ };
483
+ completionRewards: {
484
+ type: import("@contractspec/lib.schema").SchemaModel<{
485
+ badgeKey: {
486
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
487
+ isOptional: true;
488
+ };
489
+ xp: {
490
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
491
+ isOptional: true;
492
+ };
493
+ }>;
494
+ isOptional: true;
495
+ };
496
+ metadata: {
497
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
199
498
  isOptional: true;
200
499
  };
201
500
  steps: {
@@ -212,20 +511,126 @@ export declare const platformTourContracts: {
212
511
  type: import("@contractspec/lib.schema").FieldType<string, string>;
213
512
  isOptional: true;
214
513
  };
215
- completionEvent: {
514
+ instructions: {
515
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
516
+ isOptional: true;
517
+ };
518
+ helpUrl: {
216
519
  type: import("@contractspec/lib.schema").FieldType<string, string>;
520
+ isOptional: true;
521
+ };
522
+ order: {
523
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
524
+ isOptional: true;
525
+ };
526
+ completion: {
527
+ type: import("@contractspec/lib.schema").SchemaModel<{
528
+ kind: {
529
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
530
+ isOptional: true;
531
+ };
532
+ eventName: {
533
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
534
+ isOptional: false;
535
+ };
536
+ eventVersion: {
537
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
538
+ isOptional: true;
539
+ };
540
+ sourceModule: {
541
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
542
+ isOptional: true;
543
+ };
544
+ payloadFilter: {
545
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
546
+ isOptional: true;
547
+ };
548
+ atLeast: {
549
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
550
+ isOptional: true;
551
+ };
552
+ withinHours: {
553
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
554
+ isOptional: true;
555
+ };
556
+ withinHoursOfStart: {
557
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
558
+ isOptional: true;
559
+ };
560
+ availableAfterHours: {
561
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
562
+ isOptional: true;
563
+ };
564
+ skillIdField: {
565
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
566
+ isOptional: true;
567
+ };
568
+ masteryField: {
569
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
570
+ isOptional: true;
571
+ };
572
+ minimumMastery: {
573
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
574
+ isOptional: true;
575
+ };
576
+ requiredCount: {
577
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
578
+ isOptional: true;
579
+ };
580
+ }>;
217
581
  isOptional: false;
218
582
  };
219
- sourceModule: {
583
+ availability: {
584
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
585
+ isOptional: true;
586
+ };
587
+ prerequisites: {
588
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
589
+ isOptional: true;
590
+ };
591
+ prerequisiteMode: {
220
592
  type: import("@contractspec/lib.schema").FieldType<string, string>;
221
593
  isOptional: true;
222
594
  };
595
+ branches: {
596
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
597
+ isOptional: true;
598
+ };
599
+ reward: {
600
+ type: import("@contractspec/lib.schema").SchemaModel<{
601
+ badgeKey: {
602
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
603
+ isOptional: true;
604
+ };
605
+ xp: {
606
+ type: import("@contractspec/lib.schema").FieldType<number, number>;
607
+ isOptional: true;
608
+ };
609
+ }>;
610
+ isOptional: true;
611
+ };
223
612
  xpReward: {
224
613
  type: import("@contractspec/lib.schema").FieldType<number, number>;
225
614
  isOptional: true;
226
615
  };
227
- order: {
228
- type: import("@contractspec/lib.schema").FieldType<number, number>;
616
+ isRequired: {
617
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
618
+ isOptional: true;
619
+ };
620
+ canSkip: {
621
+ type: import("@contractspec/lib.schema").FieldType<boolean, boolean>;
622
+ isOptional: true;
623
+ };
624
+ actionUrl: {
625
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
626
+ isOptional: true;
627
+ };
628
+ actionLabel: {
629
+ type: import("@contractspec/lib.schema").FieldType<string, string>;
630
+ isOptional: true;
631
+ };
632
+ metadata: {
633
+ type: import("@contractspec/lib.schema").FieldType<unknown, unknown>;
229
634
  isOptional: true;
230
635
  };
231
636
  }>;
@@ -259,5 +664,5 @@ export declare const platformTourContracts: {
259
664
  isOptional: false;
260
665
  };
261
666
  }>, undefined>;
262
- track: import("@contractspec/module.learning-journey/track-spec").LearningJourneyTrackSpec;
667
+ track: import("@contractspec/module.learning-journey/track-spec").JourneyTrackSpec;
263
668
  };
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var i={id:"platform_primitives_tour",productId:"contractspec-platform",name:"Platform Primitives Tour",description:"Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",targetUserSegment:"platform_developer",targetRole:"developer",totalXp:140,completionRewards:{xpBonus:20,badgeKey:"platform_primitives"},steps:[{id:"identity_rbac",title:"Create org and member",description:"Create an org and add at least one member.",order:1,completion:{eventName:"org.member.added",sourceModule:"@contractspec/lib.identity-rbac"},xpReward:20,metadata:{surface:"identity"}},{id:"event_bus_audit",title:"Emit an auditable event",description:"Emit an event that lands in the audit log.",order:2,completion:{eventName:"audit_log.created",sourceModule:"@contractspec/module.audit-trail"},xpReward:20,metadata:{surface:"bus+audit"}},{id:"notifications",title:"Send a notification",description:"Send yourself a notification and verify delivery.",order:3,completion:{eventName:"notification.sent",sourceModule:"@contractspec/module.notifications"},xpReward:20,metadata:{surface:"notifications"}},{id:"jobs_scheduler",title:"Schedule and run a job",description:"Schedule a background job and let it run once.",order:4,completion:{eventName:"job.completed",sourceModule:"@contractspec/lib.jobs"},xpReward:20,metadata:{surface:"jobs"}},{id:"feature_flags",title:"Create and toggle a feature flag",description:"Create a feature flag and toggle it at least once.",order:5,completion:{eventName:"flag.toggled",sourceModule:"@contractspec/lib.feature-flags"},xpReward:20,metadata:{surface:"feature-flags"}},{id:"files_attachments",title:"Attach a file",description:"Upload and attach a file to any entity.",order:6,completion:{eventName:"attachment.attached",sourceModule:"@contractspec/lib.files"},xpReward:20,metadata:{surface:"files"}},{id:"usage_metering",title:"Record usage",description:"Emit a usage metric (regeneration, agent run, or similar).",order:7,completion:{eventName:"usage.recorded",sourceModule:"@contractspec/lib.metering"},xpReward:20,metadata:{surface:"metering"}}],metadata:{surfacedIn:["studio/learning","platform/dev-center"]}},f=[i];import{defineCommand as o,defineQuery as r}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as e,ScalarTypeEnum as t}from"@contractspec/lib.schema";var a=["examples.learning-journey.platform-tour"],d=e({name:"PlatformTourStep",description:"Step metadata for platform primitives tour",fields:{id:{type:t.String_unsecure(),isOptional:!1},title:{type:t.String_unsecure(),isOptional:!1},description:{type:t.String_unsecure(),isOptional:!0},completionEvent:{type:t.String_unsecure(),isOptional:!1},sourceModule:{type:t.String_unsecure(),isOptional:!0},xpReward:{type:t.Int_unsecure(),isOptional:!0},order:{type:t.Int_unsecure(),isOptional:!0}}}),n=e({name:"PlatformTourTrack",description:"Platform primitives tour track definition",fields:{id:{type:t.String_unsecure(),isOptional:!1},name:{type:t.String_unsecure(),isOptional:!1},description:{type:t.String_unsecure(),isOptional:!0},totalXp:{type:t.Int_unsecure(),isOptional:!0},completionXpBonus:{type:t.Int_unsecure(),isOptional:!0},completionBadgeKey:{type:t.String_unsecure(),isOptional:!0},streakHoursWindow:{type:t.Int_unsecure(),isOptional:!0},streakBonusXp:{type:t.Int_unsecure(),isOptional:!0},steps:{type:d,isArray:!0,isOptional:!1}}}),s=e({name:"PlatformTourTrackResponse",description:"Response wrapper for platform tour track",fields:{track:{type:n,isOptional:!1}}}),c=e({name:"PlatformTourRecordEventInput",description:"Emit a demo event to advance platform tour steps",fields:{learnerId:{type:t.String_unsecure(),isOptional:!1},eventName:{type:t.String_unsecure(),isOptional:!1},payload:{type:t.JSON(),isOptional:!0},occurredAt:{type:t.DateTime(),isOptional:!0}}}),l=e({name:"PlatformTourSuccess",description:"Generic success response",fields:{success:{type:t.Boolean(),isOptional:!1}}}),g=r({meta:{key:"learningJourney.platformTour.getTrack",version:"1.0.0",stability:"experimental",owners:[...a],tags:["learning","platform","tour"],description:"Fetch platform primitives tour track definition.",goal:"Expose track metadata to UIs and templates.",context:"Called by Studio/Playground to render journey steps."},io:{input:e({name:"PlatformTourTrackInput",description:"Track input",fields:{}}),output:s},policy:{auth:"user"}}),u=o({meta:{key:"learningJourney.platformTour.recordEvent",version:"1.0.0",stability:"experimental",owners:[...a],tags:["learning","platform","tour"],description:"Record an event to advance platform tour progress.",goal:"Advance steps via domain events in demo/sandbox contexts.",context:"Called by handlers or demo scripts to emit step completion events."},io:{input:c,output:l},policy:{auth:"user"}}),_={GetPlatformTourTrack:g,RecordPlatformTourEvent:u,track:i};export{_ as platformTourContracts,u as RecordPlatformTourEvent,n as PlatformTourTrackModel,g as GetPlatformTourTrack};
2
+ var a={id:"platform_primitives_tour",productId:"contractspec-platform",name:"Platform Primitives Tour",description:"Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",targetUserSegment:"platform_developer",targetRole:"developer",totalXp:140,completionRewards:{xp:20,badgeKey:"platform_primitives"},steps:[{id:"identity_rbac",title:"Create org and member",description:"Create an org and add at least one member.",order:1,completion:{eventName:"org.member.added",sourceModule:"@contractspec/lib.identity-rbac"},xpReward:20,metadata:{surface:"identity"}},{id:"event_bus_audit",title:"Emit an auditable event",description:"Emit an event that lands in the audit log.",order:2,prerequisites:[{kind:"step_completed",stepId:"identity_rbac"}],completion:{eventName:"audit_log.created",sourceModule:"@contractspec/module.audit-trail"},xpReward:20,metadata:{surface:"bus+audit"}},{id:"notifications",title:"Send a notification",description:"Send yourself a notification and verify delivery.",order:3,prerequisites:[{kind:"step_completed",stepId:"event_bus_audit"}],completion:{eventName:"notification.sent",sourceModule:"@contractspec/module.notifications"},xpReward:20,metadata:{surface:"notifications"}},{id:"jobs_scheduler",title:"Schedule and run a job",description:"Schedule a background job and let it run once.",order:4,prerequisites:[{kind:"step_completed",stepId:"notifications"}],completion:{eventName:"job.completed",sourceModule:"@contractspec/lib.jobs"},xpReward:20,metadata:{surface:"jobs"}},{id:"feature_flags",title:"Create and toggle a feature flag",description:"Create a feature flag and toggle it at least once.",order:5,prerequisites:[{kind:"step_completed",stepId:"jobs_scheduler"}],completion:{eventName:"flag.toggled",sourceModule:"@contractspec/lib.feature-flags"},xpReward:20,metadata:{surface:"feature-flags"}},{id:"files_attachments",title:"Attach a file",description:"Upload and attach a file to any entity.",order:6,prerequisites:[{kind:"step_completed",stepId:"feature_flags"}],completion:{eventName:"attachment.attached",sourceModule:"@contractspec/lib.files"},xpReward:20,metadata:{surface:"files"}},{id:"usage_metering",title:"Record usage",description:"Emit a usage metric (regeneration, agent run, or similar).",order:7,prerequisites:[{kind:"step_completed",stepId:"files_attachments"}],completion:{eventName:"usage.recorded",sourceModule:"@contractspec/lib.metering"},xpReward:20,metadata:{surface:"metering"}}],metadata:{surfacedIn:["studio/learning","platform/dev-center"]}},m=[a];import{defineCommand as r,defineQuery as o}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as t,ScalarTypeEnum as e}from"@contractspec/lib.schema";import{JourneyTrackModel as d}from"@contractspec/module.learning-journey/contracts/journey";var i=["examples.learning-journey.platform-tour"],s=d,n=t({name:"PlatformTourTrackResponse",description:"Response wrapper for platform tour track",fields:{track:{type:s,isOptional:!1}}}),c=t({name:"PlatformTourRecordEventInput",description:"Emit a demo event to advance platform tour steps",fields:{learnerId:{type:e.String_unsecure(),isOptional:!1},eventName:{type:e.String_unsecure(),isOptional:!1},payload:{type:e.JSON(),isOptional:!0},occurredAt:{type:e.DateTime(),isOptional:!0}}}),p=t({name:"PlatformTourSuccess",description:"Generic success response",fields:{success:{type:e.Boolean(),isOptional:!1}}}),l=o({meta:{key:"learningJourney.platformTour.getTrack",version:"1.0.0",stability:"experimental",owners:[...i],tags:["learning","platform","tour"],description:"Fetch platform primitives tour track definition.",goal:"Expose track metadata to UIs and templates.",context:"Called by Studio/Playground to render journey steps."},io:{input:t({name:"PlatformTourTrackInput",description:"Track input",fields:{}}),output:n},policy:{auth:"user"}}),u=r({meta:{key:"learningJourney.platformTour.recordEvent",version:"1.0.0",stability:"experimental",owners:[...i],tags:["learning","platform","tour"],description:"Record an event to advance platform tour progress.",goal:"Advance steps via domain events in demo/sandbox contexts.",context:"Called by handlers or demo scripts to emit step completion events."},io:{input:c,output:p},policy:{auth:"user"}}),x={GetPlatformTourTrack:l,RecordPlatformTourEvent:u,track:a};export{x as platformTourContracts,u as RecordPlatformTourEvent,s as PlatformJourneyTrackModel,l as GetPlatformTourTrack};