@contractspec/module.lifecycle-advisor 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -6,7 +6,1043 @@ import {
6
6
 
7
7
  // src/data/stage-playbooks.ts
8
8
  import { LifecycleStage } from "@contractspec/lib.lifecycle";
9
- var stagePlaybooks = [
9
+
10
+ // src/i18n/messages.ts
11
+ import {
12
+ createI18nFactory
13
+ } from "@contractspec/lib.contracts-spec/translations";
14
+
15
+ // src/i18n/catalogs/en.ts
16
+ import { defineTranslation } from "@contractspec/lib.contracts-spec/translations";
17
+ var enMessages = defineTranslation({
18
+ meta: {
19
+ key: "lifecycle-advisor.messages",
20
+ version: "1.0.0",
21
+ domain: "lifecycle-advisor",
22
+ description: "Playbook, ceremony, library, and engine strings for the lifecycle-advisor module",
23
+ owners: ["platform"],
24
+ stability: "experimental"
25
+ },
26
+ locale: "en",
27
+ fallback: "en",
28
+ messages: {
29
+ "playbook.stage0.focus.0": {
30
+ value: "Discovery",
31
+ description: "Stage 0 focus area: discovery research"
32
+ },
33
+ "playbook.stage0.focus.1": {
34
+ value: "Problem clarity",
35
+ description: "Stage 0 focus area: sharpening the problem definition"
36
+ },
37
+ "playbook.stage0.focus.2": {
38
+ value: "Persona",
39
+ description: "Stage 0 focus area: identifying the target persona"
40
+ },
41
+ "playbook.stage1.focus.0": {
42
+ value: "Prototype",
43
+ description: "Stage 1 focus area: building a prototype"
44
+ },
45
+ "playbook.stage1.focus.1": {
46
+ value: "Feedback",
47
+ description: "Stage 1 focus area: gathering user feedback"
48
+ },
49
+ "playbook.stage1.focus.2": {
50
+ value: "Value proof",
51
+ description: "Stage 1 focus area: proving the value proposition"
52
+ },
53
+ "playbook.stage2.focus.0": {
54
+ value: "Activation",
55
+ description: "Stage 2 focus area: user activation"
56
+ },
57
+ "playbook.stage2.focus.1": {
58
+ value: "Telemetry",
59
+ description: "Stage 2 focus area: usage telemetry"
60
+ },
61
+ "playbook.stage2.focus.2": {
62
+ value: "Feedback",
63
+ description: "Stage 2 focus area: continuous user feedback"
64
+ },
65
+ "playbook.stage3.focus.0": {
66
+ value: "Retention",
67
+ description: "Stage 3 focus area: user retention"
68
+ },
69
+ "playbook.stage3.focus.1": {
70
+ value: "Reliability",
71
+ description: "Stage 3 focus area: product reliability"
72
+ },
73
+ "playbook.stage3.focus.2": {
74
+ value: "Story",
75
+ description: "Stage 3 focus area: building the narrative"
76
+ },
77
+ "playbook.stage4.focus.0": {
78
+ value: "Systems",
79
+ description: "Stage 4 focus area: scalable systems"
80
+ },
81
+ "playbook.stage4.focus.1": {
82
+ value: "Growth loops",
83
+ description: "Stage 4 focus area: repeatable growth loops"
84
+ },
85
+ "playbook.stage4.focus.2": {
86
+ value: "Specialization",
87
+ description: "Stage 4 focus area: team specialization"
88
+ },
89
+ "playbook.stage5.focus.0": {
90
+ value: "Partners",
91
+ description: "Stage 5 focus area: partner ecosystem"
92
+ },
93
+ "playbook.stage5.focus.1": {
94
+ value: "APIs",
95
+ description: "Stage 5 focus area: platform APIs"
96
+ },
97
+ "playbook.stage5.focus.2": {
98
+ value: "Expansion bets",
99
+ description: "Stage 5 focus area: expansion experiments"
100
+ },
101
+ "playbook.stage6.focus.0": {
102
+ value: "Optimization",
103
+ description: "Stage 6 focus area: operational optimization"
104
+ },
105
+ "playbook.stage6.focus.1": {
106
+ value: "Renewal",
107
+ description: "Stage 6 focus area: product renewal"
108
+ },
109
+ "playbook.stage6.focus.2": {
110
+ value: "Portfolio",
111
+ description: "Stage 6 focus area: portfolio management"
112
+ },
113
+ "playbook.stage0.action0.title": {
114
+ value: "Run a 5-day interview burst",
115
+ description: "Action title for stage 0 interview sprint"
116
+ },
117
+ "playbook.stage0.action0.description": {
118
+ value: "Schedule at least 5 back-to-back interviews and capture raw quotes.",
119
+ description: "Action description for stage 0 interview sprint"
120
+ },
121
+ "playbook.stage0.action1.title": {
122
+ value: "Write the problem story",
123
+ description: "Action title for stage 0 problem narrative"
124
+ },
125
+ "playbook.stage0.action1.description": {
126
+ value: "Summarize the pain in one paragraph you can repeat to partners.",
127
+ description: "Action description for stage 0 problem narrative"
128
+ },
129
+ "playbook.stage1.action0.title": {
130
+ value: "Prototype feedback loop",
131
+ description: "Action title for stage 1 prototype iteration"
132
+ },
133
+ "playbook.stage1.action0.description": {
134
+ value: "Ship a low-fidelity prototype and collect 3 rounds of reactions.",
135
+ description: "Action description for stage 1 prototype iteration"
136
+ },
137
+ "playbook.stage1.action1.title": {
138
+ value: "Capture referral signals",
139
+ description: "Action title for stage 1 referral tracking"
140
+ },
141
+ "playbook.stage1.action1.description": {
142
+ value: "Ask each tester who else should see the demo.",
143
+ description: "Action description for stage 1 referral tracking"
144
+ },
145
+ "playbook.stage2.action0.title": {
146
+ value: "Define activation checklist",
147
+ description: "Action title for stage 2 activation definition"
148
+ },
149
+ "playbook.stage2.action0.description": {
150
+ value: "Document the 3 steps users must finish to get value.",
151
+ description: "Action description for stage 2 activation definition"
152
+ },
153
+ "playbook.stage2.action1.title": {
154
+ value: "Weekly user sync",
155
+ description: "Action title for stage 2 user communication"
156
+ },
157
+ "playbook.stage2.action1.description": {
158
+ value: "Host a standing call with your 5 most active testers.",
159
+ description: "Action description for stage 2 user communication"
160
+ },
161
+ "playbook.stage3.action0.title": {
162
+ value: "Run a retention study",
163
+ description: "Action title for stage 3 retention analysis"
164
+ },
165
+ "playbook.stage3.action0.description": {
166
+ value: "Interview 3 retained users and publish their before/after metrics.",
167
+ description: "Action description for stage 3 retention analysis"
168
+ },
169
+ "playbook.stage3.action1.title": {
170
+ value: "Lightweight incident review",
171
+ description: "Action title for stage 3 reliability review"
172
+ },
173
+ "playbook.stage3.action1.description": {
174
+ value: "Review the last 2 reliability hiccups and capture fixes.",
175
+ description: "Action description for stage 3 reliability review"
176
+ },
177
+ "playbook.stage4.action0.title": {
178
+ value: "Codify a growth loop",
179
+ description: "Action title for stage 4 growth loop setup"
180
+ },
181
+ "playbook.stage4.action0.description": {
182
+ value: "Choose one loop (SEO, referrals, outbound) and document owners + inputs.",
183
+ description: "Action description for stage 4 growth loop setup"
184
+ },
185
+ "playbook.stage4.action1.title": {
186
+ value: "Create hiring map",
187
+ description: "Action title for stage 4 hiring plan"
188
+ },
189
+ "playbook.stage4.action1.description": {
190
+ value: "List specialized roles you need in the next 2 quarters.",
191
+ description: "Action description for stage 4 hiring plan"
192
+ },
193
+ "playbook.stage5.action0.title": {
194
+ value: "Partner readiness brief",
195
+ description: "Action title for stage 5 partner preparation"
196
+ },
197
+ "playbook.stage5.action0.description": {
198
+ value: "Document partner types, value props, and onboarding steps.",
199
+ description: "Action description for stage 5 partner preparation"
200
+ },
201
+ "playbook.stage5.action1.title": {
202
+ value: "Expansion experiment portfolio",
203
+ description: "Action title for stage 5 expansion planning"
204
+ },
205
+ "playbook.stage5.action1.description": {
206
+ value: "List the top 3 markets or product lines with owners.",
207
+ description: "Action description for stage 5 expansion planning"
208
+ },
209
+ "playbook.stage6.action0.title": {
210
+ value: "Run a cost-to-value review",
211
+ description: "Action title for stage 6 margin audit"
212
+ },
213
+ "playbook.stage6.action0.description": {
214
+ value: "Audit each major surface for margin impact.",
215
+ description: "Action description for stage 6 margin audit"
216
+ },
217
+ "playbook.stage6.action1.title": {
218
+ value: "Define the renewal bet",
219
+ description: "Action title for stage 6 reinvention track"
220
+ },
221
+ "playbook.stage6.action1.description": {
222
+ value: "Choose one reinvention or sunset track and set checkpoints.",
223
+ description: "Action description for stage 6 reinvention track"
224
+ },
225
+ "ceremony.stage0.title": {
226
+ value: "Discovery Spark",
227
+ description: "Ceremony title for stage 0"
228
+ },
229
+ "ceremony.stage0.copy": {
230
+ value: "Share the sharpest pain quote with your crew. Frame it, celebrate focus.",
231
+ description: "Ceremony copy for stage 0"
232
+ },
233
+ "ceremony.stage1.title": {
234
+ value: "Solution Resonance",
235
+ description: "Ceremony title for stage 1"
236
+ },
237
+ "ceremony.stage1.copy": {
238
+ value: "Record a short screen share telling the before/after story to your future self.",
239
+ description: "Ceremony copy for stage 1"
240
+ },
241
+ "ceremony.stage2.title": {
242
+ value: "Traction Toast",
243
+ description: "Ceremony title for stage 2"
244
+ },
245
+ "ceremony.stage2.copy": {
246
+ value: "Toast your first 20 real users\u2014say their names, tell them why they matter.",
247
+ description: "Ceremony copy for stage 2"
248
+ },
249
+ "ceremony.stage3.title": {
250
+ value: "PMF Signal Fire",
251
+ description: "Ceremony title for stage 3"
252
+ },
253
+ "ceremony.stage3.copy": {
254
+ value: "Write a letter to your future Series A self describing the pull you feel today.",
255
+ description: "Ceremony copy for stage 3"
256
+ },
257
+ "ceremony.stage4.title": {
258
+ value: "Scale Systems",
259
+ description: "Ceremony title for stage 4"
260
+ },
261
+ "ceremony.stage4.copy": {
262
+ value: "Invite the team to map the journey from first user to repeatable machine.",
263
+ description: "Ceremony copy for stage 4"
264
+ },
265
+ "ceremony.stage5.title": {
266
+ value: "Platform Threshold",
267
+ description: "Ceremony title for stage 5"
268
+ },
269
+ "ceremony.stage5.copy": {
270
+ value: "Host a partner circle\u2014invite allies to share what they need from your platform.",
271
+ description: "Ceremony copy for stage 5"
272
+ },
273
+ "ceremony.stage6.title": {
274
+ value: "Renewal Summit",
275
+ description: "Ceremony title for stage 6"
276
+ },
277
+ "ceremony.stage6.copy": {
278
+ value: "Pause to honor what got you here, then commit publicly to the next reinvention.",
279
+ description: "Ceremony copy for stage 6"
280
+ },
281
+ "library.stage0.item0": {
282
+ value: "Summarize interviews and synthesize IC insights.",
283
+ description: "Library tool description for stage 0 item 0"
284
+ },
285
+ "library.stage0.item1": {
286
+ value: "Craft low-fi storyboards without custom code.",
287
+ description: "Library tool description for stage 0 item 1"
288
+ },
289
+ "library.stage1.item0": {
290
+ value: "Gate prototype features behind lightweight flags.",
291
+ description: "Library tool description for stage 1 item 0"
292
+ },
293
+ "library.stage1.item1": {
294
+ value: "Capture questionnaire signals for early scoring.",
295
+ description: "Library tool description for stage 1 item 1"
296
+ },
297
+ "library.stage2.item0": {
298
+ value: "Instrument activation paths + cohorts.",
299
+ description: "Library tool description for stage 2 item 0"
300
+ },
301
+ "library.stage2.item1": {
302
+ value: "Collect minimum viable traces and metrics.",
303
+ description: "Library tool description for stage 2 item 1"
304
+ },
305
+ "library.stage3.item0": {
306
+ value: "Auto-detect contract gaps and spec improvements.",
307
+ description: "Library tool description for stage 3 item 0"
308
+ },
309
+ "library.stage3.item1": {
310
+ value: "Generate retention-focused guidance at scale.",
311
+ description: "Library tool description for stage 3 item 1"
312
+ },
313
+ "library.stage4.item0": {
314
+ value: "Experiment orchestration with guardrails.",
315
+ description: "Library tool description for stage 4 item 0"
316
+ },
317
+ "library.stage4.item1": {
318
+ value: "Stabilize infra and SLOs as teams split.",
319
+ description: "Library tool description for stage 4 item 1"
320
+ },
321
+ "library.stage5.item0": {
322
+ value: "Automate partner workflows and integrations.",
323
+ description: "Library tool description for stage 5 item 0"
324
+ },
325
+ "library.stage5.item1": {
326
+ value: "Expose managed partner onboarding via Studio.",
327
+ description: "Library tool description for stage 5 item 1"
328
+ },
329
+ "library.stage6.item0": {
330
+ value: "Model margin scenarios and reinvestment bets.",
331
+ description: "Library tool description for stage 6 item 0"
332
+ },
333
+ "library.stage6.item1": {
334
+ value: "Standardize renewal rituals and automation.",
335
+ description: "Library tool description for stage 6 item 1"
336
+ },
337
+ "engine.fallbackAction.title": {
338
+ value: "Advance {focus}",
339
+ description: "Fallback action title when no specific action exists",
340
+ placeholders: [{ name: "focus", type: "string" }]
341
+ },
342
+ "engine.fallbackAction.description": {
343
+ value: 'Identify one task that will improve "{focus}" this week.',
344
+ description: "Fallback action description when no specific action exists",
345
+ placeholders: [{ name: "focus", type: "string" }]
346
+ }
347
+ }
348
+ });
349
+
350
+ // src/i18n/catalogs/fr.ts
351
+ import { defineTranslation as defineTranslation2 } from "@contractspec/lib.contracts-spec/translations";
352
+ var frMessages = defineTranslation2({
353
+ meta: {
354
+ key: "lifecycle-advisor.messages",
355
+ version: "1.0.0",
356
+ domain: "lifecycle-advisor",
357
+ description: "Playbook, ceremony, library, and engine strings (French)",
358
+ owners: ["platform"],
359
+ stability: "experimental"
360
+ },
361
+ locale: "fr",
362
+ fallback: "en",
363
+ messages: {
364
+ "playbook.stage0.focus.0": {
365
+ value: "D\xE9couverte",
366
+ description: "Stage 0 focus area: Discovery"
367
+ },
368
+ "playbook.stage0.focus.1": {
369
+ value: "Clart\xE9 du probl\xE8me",
370
+ description: "Stage 0 focus area: Problem clarity"
371
+ },
372
+ "playbook.stage0.focus.2": {
373
+ value: "Persona",
374
+ description: "Stage 0 focus area: Persona"
375
+ },
376
+ "playbook.stage1.focus.0": {
377
+ value: "Prototype",
378
+ description: "Stage 1 focus area: Prototype"
379
+ },
380
+ "playbook.stage1.focus.1": {
381
+ value: "Retours",
382
+ description: "Stage 1 focus area: Feedback"
383
+ },
384
+ "playbook.stage1.focus.2": {
385
+ value: "Preuve de valeur",
386
+ description: "Stage 1 focus area: Value proof"
387
+ },
388
+ "playbook.stage2.focus.0": {
389
+ value: "Activation",
390
+ description: "Stage 2 focus area: Activation"
391
+ },
392
+ "playbook.stage2.focus.1": {
393
+ value: "T\xE9l\xE9m\xE9trie",
394
+ description: "Stage 2 focus area: Telemetry"
395
+ },
396
+ "playbook.stage2.focus.2": {
397
+ value: "Retours",
398
+ description: "Stage 2 focus area: Feedback"
399
+ },
400
+ "playbook.stage3.focus.0": {
401
+ value: "R\xE9tention",
402
+ description: "Stage 3 focus area: Retention"
403
+ },
404
+ "playbook.stage3.focus.1": {
405
+ value: "Fiabilit\xE9",
406
+ description: "Stage 3 focus area: Reliability"
407
+ },
408
+ "playbook.stage3.focus.2": {
409
+ value: "R\xE9cit",
410
+ description: "Stage 3 focus area: Story"
411
+ },
412
+ "playbook.stage4.focus.0": {
413
+ value: "Syst\xE8mes",
414
+ description: "Stage 4 focus area: Systems"
415
+ },
416
+ "playbook.stage4.focus.1": {
417
+ value: "Boucles de croissance",
418
+ description: "Stage 4 focus area: Growth loops"
419
+ },
420
+ "playbook.stage4.focus.2": {
421
+ value: "Sp\xE9cialisation",
422
+ description: "Stage 4 focus area: Specialization"
423
+ },
424
+ "playbook.stage5.focus.0": {
425
+ value: "Partenaires",
426
+ description: "Stage 5 focus area: Partners"
427
+ },
428
+ "playbook.stage5.focus.1": {
429
+ value: "APIs",
430
+ description: "Stage 5 focus area: APIs"
431
+ },
432
+ "playbook.stage5.focus.2": {
433
+ value: "Paris d'expansion",
434
+ description: "Stage 5 focus area: Expansion bets"
435
+ },
436
+ "playbook.stage6.focus.0": {
437
+ value: "Optimisation",
438
+ description: "Stage 6 focus area: Optimization"
439
+ },
440
+ "playbook.stage6.focus.1": {
441
+ value: "Renouvellement",
442
+ description: "Stage 6 focus area: Renewal"
443
+ },
444
+ "playbook.stage6.focus.2": {
445
+ value: "Portefeuille",
446
+ description: "Stage 6 focus area: Portfolio"
447
+ },
448
+ "playbook.stage0.action0.title": {
449
+ value: "Mener un sprint d'entretiens de 5 jours",
450
+ description: "Stage 0 action 0 title"
451
+ },
452
+ "playbook.stage0.action0.description": {
453
+ value: "Planifier au moins 5 entretiens cons\xE9cutifs et capturer les citations brutes.",
454
+ description: "Stage 0 action 0 description"
455
+ },
456
+ "playbook.stage0.action1.title": {
457
+ value: "R\xE9diger l'histoire du probl\xE8me",
458
+ description: "Stage 0 action 1 title"
459
+ },
460
+ "playbook.stage0.action1.description": {
461
+ value: "R\xE9sumer la douleur en un paragraphe que vous pouvez r\xE9p\xE9ter aux partenaires.",
462
+ description: "Stage 0 action 1 description"
463
+ },
464
+ "playbook.stage1.action0.title": {
465
+ value: "Boucle de retours sur le prototype",
466
+ description: "Stage 1 action 0 title"
467
+ },
468
+ "playbook.stage1.action0.description": {
469
+ value: "Livrer un prototype basse fid\xE9lit\xE9 et recueillir 3 tours de r\xE9actions.",
470
+ description: "Stage 1 action 0 description"
471
+ },
472
+ "playbook.stage1.action1.title": {
473
+ value: "Capturer les signaux de recommandation",
474
+ description: "Stage 1 action 1 title"
475
+ },
476
+ "playbook.stage1.action1.description": {
477
+ value: "Demander \xE0 chaque testeur qui d'autre devrait voir la d\xE9mo.",
478
+ description: "Stage 1 action 1 description"
479
+ },
480
+ "playbook.stage2.action0.title": {
481
+ value: "D\xE9finir la checklist d'activation",
482
+ description: "Stage 2 action 0 title"
483
+ },
484
+ "playbook.stage2.action0.description": {
485
+ value: "Documenter les 3 \xE9tapes que les utilisateurs doivent terminer pour obtenir de la valeur.",
486
+ description: "Stage 2 action 0 description"
487
+ },
488
+ "playbook.stage2.action1.title": {
489
+ value: "Synchronisation hebdomadaire avec les utilisateurs",
490
+ description: "Stage 2 action 1 title"
491
+ },
492
+ "playbook.stage2.action1.description": {
493
+ value: "Organiser un appel r\xE9current avec vos 5 testeurs les plus actifs.",
494
+ description: "Stage 2 action 1 description"
495
+ },
496
+ "playbook.stage3.action0.title": {
497
+ value: "Mener une \xE9tude de r\xE9tention",
498
+ description: "Stage 3 action 0 title"
499
+ },
500
+ "playbook.stage3.action0.description": {
501
+ value: "Interviewer 3 utilisateurs retenus et publier leurs m\xE9triques avant/apr\xE8s.",
502
+ description: "Stage 3 action 0 description"
503
+ },
504
+ "playbook.stage3.action1.title": {
505
+ value: "Revue l\xE9g\xE8re d'incidents",
506
+ description: "Stage 3 action 1 title"
507
+ },
508
+ "playbook.stage3.action1.description": {
509
+ value: "Examiner les 2 derniers incidents de fiabilit\xE9 et capturer les correctifs.",
510
+ description: "Stage 3 action 1 description"
511
+ },
512
+ "playbook.stage4.action0.title": {
513
+ value: "Codifier une boucle de croissance",
514
+ description: "Stage 4 action 0 title"
515
+ },
516
+ "playbook.stage4.action0.description": {
517
+ value: "Choisir une boucle (SEO, recommandations, outbound) et documenter les responsables + entr\xE9es.",
518
+ description: "Stage 4 action 0 description"
519
+ },
520
+ "playbook.stage4.action1.title": {
521
+ value: "Cr\xE9er la carte de recrutement",
522
+ description: "Stage 4 action 1 title"
523
+ },
524
+ "playbook.stage4.action1.description": {
525
+ value: "Lister les r\xF4les sp\xE9cialis\xE9s n\xE9cessaires pour les 2 prochains trimestres.",
526
+ description: "Stage 4 action 1 description"
527
+ },
528
+ "playbook.stage5.action0.title": {
529
+ value: "Brief de pr\xE9paration partenaire",
530
+ description: "Stage 5 action 0 title"
531
+ },
532
+ "playbook.stage5.action0.description": {
533
+ value: "Documenter les types de partenaires, propositions de valeur et \xE9tapes d'int\xE9gration.",
534
+ description: "Stage 5 action 0 description"
535
+ },
536
+ "playbook.stage5.action1.title": {
537
+ value: "Portefeuille d'exp\xE9riences d'expansion",
538
+ description: "Stage 5 action 1 title"
539
+ },
540
+ "playbook.stage5.action1.description": {
541
+ value: "Lister les 3 principaux march\xE9s ou lignes de produits avec les responsables.",
542
+ description: "Stage 5 action 1 description"
543
+ },
544
+ "playbook.stage6.action0.title": {
545
+ value: "Mener une revue co\xFBt-valeur",
546
+ description: "Stage 6 action 0 title"
547
+ },
548
+ "playbook.stage6.action0.description": {
549
+ value: "Auditer chaque surface majeure pour l\u2019impact sur les marges.",
550
+ description: "Stage 6 action 0 description"
551
+ },
552
+ "playbook.stage6.action1.title": {
553
+ value: "D\xE9finir le pari de renouvellement",
554
+ description: "Stage 6 action 1 title"
555
+ },
556
+ "playbook.stage6.action1.description": {
557
+ value: "Choisir une piste de r\xE9invention ou d'arr\xEAt et d\xE9finir des points de contr\xF4le.",
558
+ description: "Stage 6 action 1 description"
559
+ },
560
+ "ceremony.stage0.title": {
561
+ value: "\xC9tincelle de d\xE9couverte",
562
+ description: "Stage 0 ceremony title"
563
+ },
564
+ "ceremony.stage0.copy": {
565
+ value: "Partagez la citation la plus percutante avec votre \xE9quipe. Encadrez-la, c\xE9l\xE9brez le focus.",
566
+ description: "Stage 0 ceremony copy"
567
+ },
568
+ "ceremony.stage1.title": {
569
+ value: "R\xE9sonance de la solution",
570
+ description: "Stage 1 ceremony title"
571
+ },
572
+ "ceremony.stage1.copy": {
573
+ value: "Enregistrez un court partage d'\xE9cran racontant l'histoire avant/apr\xE8s \xE0 votre futur vous.",
574
+ description: "Stage 1 ceremony copy"
575
+ },
576
+ "ceremony.stage2.title": {
577
+ value: "Toast \xE0 la traction",
578
+ description: "Stage 2 ceremony title"
579
+ },
580
+ "ceremony.stage2.copy": {
581
+ value: "Portez un toast \xE0 vos 20 premiers vrais utilisateurs \u2014 dites leurs noms, dites-leur pourquoi ils comptent.",
582
+ description: "Stage 2 ceremony copy"
583
+ },
584
+ "ceremony.stage3.title": {
585
+ value: "Signal PMF",
586
+ description: "Stage 3 ceremony title"
587
+ },
588
+ "ceremony.stage3.copy": {
589
+ value: "\xC9crivez une lettre \xE0 votre futur vous de la S\xE9rie A d\xE9crivant l'attraction que vous ressentez aujourd'hui.",
590
+ description: "Stage 3 ceremony copy"
591
+ },
592
+ "ceremony.stage4.title": {
593
+ value: "Syst\xE8mes d'\xE9chelle",
594
+ description: "Stage 4 ceremony title"
595
+ },
596
+ "ceremony.stage4.copy": {
597
+ value: "Invitez l'\xE9quipe \xE0 cartographier le parcours du premier utilisateur \xE0 la machine r\xE9p\xE9table.",
598
+ description: "Stage 4 ceremony copy"
599
+ },
600
+ "ceremony.stage5.title": {
601
+ value: "Seuil de la plateforme",
602
+ description: "Stage 5 ceremony title"
603
+ },
604
+ "ceremony.stage5.copy": {
605
+ value: "Organisez un cercle de partenaires \u2014 invitez les alli\xE9s \xE0 partager ce dont ils ont besoin de votre plateforme.",
606
+ description: "Stage 5 ceremony copy"
607
+ },
608
+ "ceremony.stage6.title": {
609
+ value: "Sommet du renouvellement",
610
+ description: "Stage 6 ceremony title"
611
+ },
612
+ "ceremony.stage6.copy": {
613
+ value: "Faites une pause pour honorer ce qui vous a amen\xE9 ici, puis engagez-vous publiquement pour la prochaine r\xE9invention.",
614
+ description: "Stage 6 ceremony copy"
615
+ },
616
+ "library.stage0.item0": {
617
+ value: "R\xE9sumer les entretiens et synth\xE9tiser les insights IC.",
618
+ description: "Stage 0 library item 0"
619
+ },
620
+ "library.stage0.item1": {
621
+ value: "Cr\xE9er des storyboards basse fid\xE9lit\xE9 sans code personnalis\xE9.",
622
+ description: "Stage 0 library item 1"
623
+ },
624
+ "library.stage1.item0": {
625
+ value: "Contr\xF4ler les fonctionnalit\xE9s prototype derri\xE8re des flags l\xE9gers.",
626
+ description: "Stage 1 library item 0"
627
+ },
628
+ "library.stage1.item1": {
629
+ value: "Capturer les signaux de questionnaire pour un scoring pr\xE9coce.",
630
+ description: "Stage 1 library item 1"
631
+ },
632
+ "library.stage2.item0": {
633
+ value: "Instrumenter les parcours d'activation + cohortes.",
634
+ description: "Stage 2 library item 0"
635
+ },
636
+ "library.stage2.item1": {
637
+ value: "Collecter les traces et m\xE9triques minimales viables.",
638
+ description: "Stage 2 library item 1"
639
+ },
640
+ "library.stage3.item0": {
641
+ value: "D\xE9tecter automatiquement les lacunes de contrat et am\xE9liorations de spec.",
642
+ description: "Stage 3 library item 0"
643
+ },
644
+ "library.stage3.item1": {
645
+ value: "G\xE9n\xE9rer des conseils ax\xE9s sur la r\xE9tention \xE0 grande \xE9chelle.",
646
+ description: "Stage 3 library item 1"
647
+ },
648
+ "library.stage4.item0": {
649
+ value: "Orchestration d'exp\xE9riences avec garde-fous.",
650
+ description: "Stage 4 library item 0"
651
+ },
652
+ "library.stage4.item1": {
653
+ value: "Stabiliser l\u2019infra et les SLOs au fur et \xE0 mesure que les \xE9quipes se divisent.",
654
+ description: "Stage 4 library item 1"
655
+ },
656
+ "library.stage5.item0": {
657
+ value: "Automatiser les workflows partenaires et int\xE9grations.",
658
+ description: "Stage 5 library item 0"
659
+ },
660
+ "library.stage5.item1": {
661
+ value: "Exposer l'int\xE9gration partenaire g\xE9r\xE9e via Studio.",
662
+ description: "Stage 5 library item 1"
663
+ },
664
+ "library.stage6.item0": {
665
+ value: "Mod\xE9liser les sc\xE9narios de marge et paris de r\xE9investissement.",
666
+ description: "Stage 6 library item 0"
667
+ },
668
+ "library.stage6.item1": {
669
+ value: "Standardiser les rituels de renouvellement et l'automatisation.",
670
+ description: "Stage 6 library item 1"
671
+ },
672
+ "engine.fallbackAction.title": {
673
+ value: "Avancer sur {focus}",
674
+ description: "Fallback action title with focus placeholder"
675
+ },
676
+ "engine.fallbackAction.description": {
677
+ value: "Identifier une t\xE2che qui am\xE9liorera \xAB\u202F{focus}\u202F\xBB cette semaine.",
678
+ description: "Fallback action description with focus placeholder"
679
+ }
680
+ }
681
+ });
682
+
683
+ // src/i18n/catalogs/es.ts
684
+ import { defineTranslation as defineTranslation3 } from "@contractspec/lib.contracts-spec/translations";
685
+ var esMessages = defineTranslation3({
686
+ meta: {
687
+ key: "lifecycle-advisor.messages",
688
+ version: "1.0.0",
689
+ domain: "lifecycle-advisor",
690
+ description: "Playbook, ceremony, library, and engine strings (Spanish)",
691
+ owners: ["platform"],
692
+ stability: "experimental"
693
+ },
694
+ locale: "es",
695
+ fallback: "en",
696
+ messages: {
697
+ "playbook.stage0.focus.0": {
698
+ value: "Descubrimiento",
699
+ description: "Stage 0 focus area: discovery research"
700
+ },
701
+ "playbook.stage0.focus.1": {
702
+ value: "Claridad del problema",
703
+ description: "Stage 0 focus area: sharpening the problem definition"
704
+ },
705
+ "playbook.stage0.focus.2": {
706
+ value: "Persona",
707
+ description: "Stage 0 focus area: identifying the target persona"
708
+ },
709
+ "playbook.stage1.focus.0": {
710
+ value: "Prototipo",
711
+ description: "Stage 1 focus area: building a prototype"
712
+ },
713
+ "playbook.stage1.focus.1": {
714
+ value: "Retroalimentaci\xF3n",
715
+ description: "Stage 1 focus area: gathering user feedback"
716
+ },
717
+ "playbook.stage1.focus.2": {
718
+ value: "Prueba de valor",
719
+ description: "Stage 1 focus area: proving the value proposition"
720
+ },
721
+ "playbook.stage2.focus.0": {
722
+ value: "Activaci\xF3n",
723
+ description: "Stage 2 focus area: user activation"
724
+ },
725
+ "playbook.stage2.focus.1": {
726
+ value: "Telemetr\xEDa",
727
+ description: "Stage 2 focus area: usage telemetry"
728
+ },
729
+ "playbook.stage2.focus.2": {
730
+ value: "Retroalimentaci\xF3n",
731
+ description: "Stage 2 focus area: continuous user feedback"
732
+ },
733
+ "playbook.stage3.focus.0": {
734
+ value: "Retenci\xF3n",
735
+ description: "Stage 3 focus area: user retention"
736
+ },
737
+ "playbook.stage3.focus.1": {
738
+ value: "Fiabilidad",
739
+ description: "Stage 3 focus area: product reliability"
740
+ },
741
+ "playbook.stage3.focus.2": {
742
+ value: "Historia",
743
+ description: "Stage 3 focus area: building the narrative"
744
+ },
745
+ "playbook.stage4.focus.0": {
746
+ value: "Sistemas",
747
+ description: "Stage 4 focus area: scalable systems"
748
+ },
749
+ "playbook.stage4.focus.1": {
750
+ value: "Bucles de crecimiento",
751
+ description: "Stage 4 focus area: repeatable growth loops"
752
+ },
753
+ "playbook.stage4.focus.2": {
754
+ value: "Especializaci\xF3n",
755
+ description: "Stage 4 focus area: team specialization"
756
+ },
757
+ "playbook.stage5.focus.0": {
758
+ value: "Socios",
759
+ description: "Stage 5 focus area: partner ecosystem"
760
+ },
761
+ "playbook.stage5.focus.1": {
762
+ value: "APIs",
763
+ description: "Stage 5 focus area: platform APIs"
764
+ },
765
+ "playbook.stage5.focus.2": {
766
+ value: "Apuestas de expansi\xF3n",
767
+ description: "Stage 5 focus area: expansion experiments"
768
+ },
769
+ "playbook.stage6.focus.0": {
770
+ value: "Optimizaci\xF3n",
771
+ description: "Stage 6 focus area: operational optimization"
772
+ },
773
+ "playbook.stage6.focus.1": {
774
+ value: "Renovaci\xF3n",
775
+ description: "Stage 6 focus area: product renewal"
776
+ },
777
+ "playbook.stage6.focus.2": {
778
+ value: "Portafolio",
779
+ description: "Stage 6 focus area: portfolio management"
780
+ },
781
+ "playbook.stage0.action0.title": {
782
+ value: "Realizar un sprint de entrevistas de 5 d\xEDas",
783
+ description: "Action title for stage 0 interview sprint"
784
+ },
785
+ "playbook.stage0.action0.description": {
786
+ value: "Programar al menos 5 entrevistas consecutivas y capturar citas sin editar.",
787
+ description: "Action description for stage 0 interview sprint"
788
+ },
789
+ "playbook.stage0.action1.title": {
790
+ value: "Redactar la historia del problema",
791
+ description: "Action title for stage 0 problem narrative"
792
+ },
793
+ "playbook.stage0.action1.description": {
794
+ value: "Resumir el dolor en un p\xE1rrafo que puedas repetir a los socios.",
795
+ description: "Action description for stage 0 problem narrative"
796
+ },
797
+ "playbook.stage1.action0.title": {
798
+ value: "Ciclo de retroalimentaci\xF3n del prototipo",
799
+ description: "Action title for stage 1 prototype iteration"
800
+ },
801
+ "playbook.stage1.action0.description": {
802
+ value: "Entregar un prototipo de baja fidelidad y recopilar 3 rondas de reacciones.",
803
+ description: "Action description for stage 1 prototype iteration"
804
+ },
805
+ "playbook.stage1.action1.title": {
806
+ value: "Capturar se\xF1ales de recomendaci\xF3n",
807
+ description: "Action title for stage 1 referral tracking"
808
+ },
809
+ "playbook.stage1.action1.description": {
810
+ value: "Preguntar a cada tester qui\xE9n m\xE1s deber\xEDa ver la demo.",
811
+ description: "Action description for stage 1 referral tracking"
812
+ },
813
+ "playbook.stage2.action0.title": {
814
+ value: "Definir lista de verificaci\xF3n de activaci\xF3n",
815
+ description: "Action title for stage 2 activation definition"
816
+ },
817
+ "playbook.stage2.action0.description": {
818
+ value: "Documentar los 3 pasos que los usuarios deben completar para obtener valor.",
819
+ description: "Action description for stage 2 activation definition"
820
+ },
821
+ "playbook.stage2.action1.title": {
822
+ value: "Sincronizaci\xF3n semanal con usuarios",
823
+ description: "Action title for stage 2 user communication"
824
+ },
825
+ "playbook.stage2.action1.description": {
826
+ value: "Organizar una llamada recurrente con tus 5 testers m\xE1s activos.",
827
+ description: "Action description for stage 2 user communication"
828
+ },
829
+ "playbook.stage3.action0.title": {
830
+ value: "Realizar un estudio de retenci\xF3n",
831
+ description: "Action title for stage 3 retention analysis"
832
+ },
833
+ "playbook.stage3.action0.description": {
834
+ value: "Entrevistar a 3 usuarios retenidos y publicar sus m\xE9tricas antes/despu\xE9s.",
835
+ description: "Action description for stage 3 retention analysis"
836
+ },
837
+ "playbook.stage3.action1.title": {
838
+ value: "Revisi\xF3n ligera de incidentes",
839
+ description: "Action title for stage 3 reliability review"
840
+ },
841
+ "playbook.stage3.action1.description": {
842
+ value: "Revisar los \xFAltimos 2 problemas de fiabilidad y capturar las correcciones.",
843
+ description: "Action description for stage 3 reliability review"
844
+ },
845
+ "playbook.stage4.action0.title": {
846
+ value: "Codificar un bucle de crecimiento",
847
+ description: "Action title for stage 4 growth loop setup"
848
+ },
849
+ "playbook.stage4.action0.description": {
850
+ value: "Elegir un bucle (SEO, referencias, outbound) y documentar responsables + entradas.",
851
+ description: "Action description for stage 4 growth loop setup"
852
+ },
853
+ "playbook.stage4.action1.title": {
854
+ value: "Crear mapa de contrataci\xF3n",
855
+ description: "Action title for stage 4 hiring plan"
856
+ },
857
+ "playbook.stage4.action1.description": {
858
+ value: "Listar los roles especializados necesarios para los pr\xF3ximos 2 trimestres.",
859
+ description: "Action description for stage 4 hiring plan"
860
+ },
861
+ "playbook.stage5.action0.title": {
862
+ value: "Brief de preparaci\xF3n para socios",
863
+ description: "Action title for stage 5 partner preparation"
864
+ },
865
+ "playbook.stage5.action0.description": {
866
+ value: "Documentar tipos de socios, propuestas de valor y pasos de incorporaci\xF3n.",
867
+ description: "Action description for stage 5 partner preparation"
868
+ },
869
+ "playbook.stage5.action1.title": {
870
+ value: "Portafolio de experimentos de expansi\xF3n",
871
+ description: "Action title for stage 5 expansion planning"
872
+ },
873
+ "playbook.stage5.action1.description": {
874
+ value: "Listar los 3 principales mercados o l\xEDneas de producto con responsables.",
875
+ description: "Action description for stage 5 expansion planning"
876
+ },
877
+ "playbook.stage6.action0.title": {
878
+ value: "Realizar una revisi\xF3n costo-valor",
879
+ description: "Action title for stage 6 margin audit"
880
+ },
881
+ "playbook.stage6.action0.description": {
882
+ value: "Auditar cada superficie principal por impacto en m\xE1rgenes.",
883
+ description: "Action description for stage 6 margin audit"
884
+ },
885
+ "playbook.stage6.action1.title": {
886
+ value: "Definir la apuesta de renovaci\xF3n",
887
+ description: "Action title for stage 6 reinvention track"
888
+ },
889
+ "playbook.stage6.action1.description": {
890
+ value: "Elegir una pista de reinvenci\xF3n o descontinuaci\xF3n y establecer puntos de control.",
891
+ description: "Action description for stage 6 reinvention track"
892
+ },
893
+ "ceremony.stage0.title": {
894
+ value: "Chispa de descubrimiento",
895
+ description: "Ceremony title for stage 0"
896
+ },
897
+ "ceremony.stage0.copy": {
898
+ value: "Comparte la cita de dolor m\xE1s impactante con tu equipo. Enm\xE1rcala, celebra el enfoque.",
899
+ description: "Ceremony copy for stage 0"
900
+ },
901
+ "ceremony.stage1.title": {
902
+ value: "Resonancia de la soluci\xF3n",
903
+ description: "Ceremony title for stage 1"
904
+ },
905
+ "ceremony.stage1.copy": {
906
+ value: "Graba un breve screencast contando la historia antes/despu\xE9s a tu futuro yo.",
907
+ description: "Ceremony copy for stage 1"
908
+ },
909
+ "ceremony.stage2.title": {
910
+ value: "Brindis por la tracci\xF3n",
911
+ description: "Ceremony title for stage 2"
912
+ },
913
+ "ceremony.stage2.copy": {
914
+ value: "Brinda por tus primeros 20 usuarios reales\u2014di sus nombres, diles por qu\xE9 importan.",
915
+ description: "Ceremony copy for stage 2"
916
+ },
917
+ "ceremony.stage3.title": {
918
+ value: "Se\xF1al de fuego PMF",
919
+ description: "Ceremony title for stage 3"
920
+ },
921
+ "ceremony.stage3.copy": {
922
+ value: "Escribe una carta a tu futuro yo de la Serie A describiendo la atracci\xF3n que sientes hoy.",
923
+ description: "Ceremony copy for stage 3"
924
+ },
925
+ "ceremony.stage4.title": {
926
+ value: "Sistemas de escala",
927
+ description: "Ceremony title for stage 4"
928
+ },
929
+ "ceremony.stage4.copy": {
930
+ value: "Invita al equipo a mapear el viaje desde el primer usuario hasta la m\xE1quina repetible.",
931
+ description: "Ceremony copy for stage 4"
932
+ },
933
+ "ceremony.stage5.title": {
934
+ value: "Umbral de la plataforma",
935
+ description: "Ceremony title for stage 5"
936
+ },
937
+ "ceremony.stage5.copy": {
938
+ value: "Organiza un c\xEDrculo de socios\u2014invita a los aliados a compartir lo que necesitan de tu plataforma.",
939
+ description: "Ceremony copy for stage 5"
940
+ },
941
+ "ceremony.stage6.title": {
942
+ value: "Cumbre de renovaci\xF3n",
943
+ description: "Ceremony title for stage 6"
944
+ },
945
+ "ceremony.stage6.copy": {
946
+ value: "Haz una pausa para honrar lo que te trajo aqu\xED, luego compr\xF3metete p\xFAblicamente con la pr\xF3xima reinvenci\xF3n.",
947
+ description: "Ceremony copy for stage 6"
948
+ },
949
+ "library.stage0.item0": {
950
+ value: "Resumir entrevistas y sintetizar insights de IC.",
951
+ description: "Library tool description for stage 0 item 0"
952
+ },
953
+ "library.stage0.item1": {
954
+ value: "Crear storyboards de baja fidelidad sin c\xF3digo personalizado.",
955
+ description: "Library tool description for stage 0 item 1"
956
+ },
957
+ "library.stage1.item0": {
958
+ value: "Controlar funcionalidades del prototipo detr\xE1s de flags ligeros.",
959
+ description: "Library tool description for stage 1 item 0"
960
+ },
961
+ "library.stage1.item1": {
962
+ value: "Capturar se\xF1ales de cuestionario para scoring temprano.",
963
+ description: "Library tool description for stage 1 item 1"
964
+ },
965
+ "library.stage2.item0": {
966
+ value: "Instrumentar rutas de activaci\xF3n + cohortes.",
967
+ description: "Library tool description for stage 2 item 0"
968
+ },
969
+ "library.stage2.item1": {
970
+ value: "Recopilar trazas y m\xE9tricas m\xEDnimas viables.",
971
+ description: "Library tool description for stage 2 item 1"
972
+ },
973
+ "library.stage3.item0": {
974
+ value: "Detectar autom\xE1ticamente brechas de contrato y mejoras de spec.",
975
+ description: "Library tool description for stage 3 item 0"
976
+ },
977
+ "library.stage3.item1": {
978
+ value: "Generar orientaci\xF3n enfocada en retenci\xF3n a escala.",
979
+ description: "Library tool description for stage 3 item 1"
980
+ },
981
+ "library.stage4.item0": {
982
+ value: "Orquestaci\xF3n de experimentos con barandillas.",
983
+ description: "Library tool description for stage 4 item 0"
984
+ },
985
+ "library.stage4.item1": {
986
+ value: "Estabilizar infraestructura y SLOs a medida que los equipos se dividen.",
987
+ description: "Library tool description for stage 4 item 1"
988
+ },
989
+ "library.stage5.item0": {
990
+ value: "Automatizar flujos de trabajo de socios e integraciones.",
991
+ description: "Library tool description for stage 5 item 0"
992
+ },
993
+ "library.stage5.item1": {
994
+ value: "Exponer incorporaci\xF3n de socios gestionada v\xEDa Studio.",
995
+ description: "Library tool description for stage 5 item 1"
996
+ },
997
+ "library.stage6.item0": {
998
+ value: "Modelar escenarios de margen y apuestas de reinversi\xF3n.",
999
+ description: "Library tool description for stage 6 item 0"
1000
+ },
1001
+ "library.stage6.item1": {
1002
+ value: "Estandarizar rituales de renovaci\xF3n y automatizaci\xF3n.",
1003
+ description: "Library tool description for stage 6 item 1"
1004
+ },
1005
+ "engine.fallbackAction.title": {
1006
+ value: "Avanzar en {focus}",
1007
+ description: "Fallback action title when no specific action exists",
1008
+ placeholders: [{ name: "focus", type: "string" }]
1009
+ },
1010
+ "engine.fallbackAction.description": {
1011
+ value: 'Identificar una tarea que mejore "{focus}" esta semana.',
1012
+ description: "Fallback action description when no specific action exists",
1013
+ placeholders: [{ name: "focus", type: "string" }]
1014
+ }
1015
+ }
1016
+ });
1017
+
1018
+ // src/i18n/messages.ts
1019
+ var factory = createI18nFactory({
1020
+ specKey: "lifecycle-advisor.messages",
1021
+ catalogs: [enMessages, frMessages, esMessages]
1022
+ });
1023
+ var createLifecycleAdvisorI18n = factory.create;
1024
+ var getDefaultI18n = factory.getDefault;
1025
+ var resetI18nRegistry = factory.resetRegistry;
1026
+
1027
+ // src/data/stage-playbooks.ts
1028
+ function getLocalizedStagePlaybooks(locale) {
1029
+ const i18n = createLifecycleAdvisorI18n(locale);
1030
+ return staticPlaybooks.map((playbook, stageIdx) => ({
1031
+ ...playbook,
1032
+ focusAreas: playbook.focusAreas.map((_, focusIdx) => i18n.t(`playbook.stage${stageIdx}.focus.${focusIdx}`)),
1033
+ actions: playbook.actions.map((action, actionIdx) => ({
1034
+ ...action,
1035
+ title: i18n.t(`playbook.stage${stageIdx}.action${actionIdx}.title`),
1036
+ description: i18n.t(`playbook.stage${stageIdx}.action${actionIdx}.description`)
1037
+ })),
1038
+ ceremony: playbook.ceremony ? {
1039
+ ...playbook.ceremony,
1040
+ title: i18n.t(`ceremony.stage${stageIdx}.title`),
1041
+ copy: i18n.t(`ceremony.stage${stageIdx}.copy`)
1042
+ } : undefined
1043
+ }));
1044
+ }
1045
+ var staticPlaybooks = [
10
1046
  {
11
1047
  stage: LifecycleStage.Exploration,
12
1048
  focusAreas: ["Discovery", "Problem clarity", "Persona"],
@@ -238,6 +1274,7 @@ var stagePlaybooks = [
238
1274
  }
239
1275
  }
240
1276
  ];
1277
+ var stagePlaybooks = staticPlaybooks;
241
1278
  var stage_playbooks_default = stagePlaybooks;
242
1279
 
243
1280
  // src/recommendations/recommendation-engine.ts
@@ -255,36 +1292,54 @@ class LifecycleRecommendationEngine {
255
1292
  this.playbooks = overrides?.length ? new Map(overrides.map((entry) => [entry.stage, entry])) : PLAYBOOK_MAP;
256
1293
  }
257
1294
  generate(assessment, options = {}) {
258
- const entry = this.playbooks.get(assessment.stage) ?? createFallbackPlaybook(assessment.stage);
259
- const limit = options.limit ?? 3;
1295
+ const { locale, limit: rawLimit, upcomingMilestones } = options;
1296
+ const limit = rawLimit ?? 3;
1297
+ const entry = locale ? resolveLocalizedPlaybook(assessment.stage, locale) : this.playbooks.get(assessment.stage) ?? createFallbackPlaybook(assessment.stage);
260
1298
  const actions = (entry.actions ?? []).slice(0, limit);
261
- const finalActions = actions.length > 0 ? actions : fallbackActions(assessment, limit);
1299
+ const finalActions = actions.length > 0 ? actions : fallbackActions(assessment, limit, locale);
262
1300
  return {
263
1301
  assessmentId: assessment.generatedAt,
264
1302
  stage: assessment.stage,
265
1303
  actions: finalActions,
266
- upcomingMilestones: options.upcomingMilestones ?? [],
1304
+ upcomingMilestones: upcomingMilestones ?? [],
267
1305
  ceremony: entry.ceremony
268
1306
  };
269
1307
  }
270
1308
  }
271
- var createFallbackPlaybook = (stage) => ({
1309
+ function resolveLocalizedPlaybook(stage, locale) {
1310
+ const localized = getLocalizedStagePlaybooks(locale);
1311
+ return localized.find((p) => p.stage === stage) ?? createFallbackPlaybook(stage, locale);
1312
+ }
1313
+ var createFallbackPlaybook = (stage, locale) => ({
272
1314
  stage,
273
1315
  actions: [],
274
- focusAreas: LIFECYCLE_STAGE_META[stage].focusAreas
1316
+ focusAreas: locale ? getLocalizedStagePlaybooks(locale).find((p) => p.stage === stage)?.focusAreas ?? LIFECYCLE_STAGE_META[stage].focusAreas : LIFECYCLE_STAGE_META[stage].focusAreas
275
1317
  });
276
- var fallbackActions = (assessment, limit) => (assessment.focusAreas ?? LIFECYCLE_STAGE_META[assessment.stage].focusAreas).slice(0, limit).map((focus, index) => ({
277
- id: `fallback-${assessment.stage}-${index}`,
278
- stage: assessment.stage,
279
- title: `Advance ${focus}`,
280
- description: `Identify one task that will improve "${focus}" this week.`,
281
- priority: index + 1,
282
- estimatedImpact: "low",
283
- effortLevel: "s",
284
- category: "product"
285
- }));
1318
+ var fallbackActions = (assessment, limit, locale) => {
1319
+ const i18n = locale ? createLifecycleAdvisorI18n(locale) : undefined;
1320
+ return (assessment.focusAreas ?? LIFECYCLE_STAGE_META[assessment.stage].focusAreas).slice(0, limit).map((focus, index) => ({
1321
+ id: `fallback-${assessment.stage}-${index}`,
1322
+ stage: assessment.stage,
1323
+ title: i18n ? i18n.t("engine.fallbackAction.title", { focus }) : `Advance ${focus}`,
1324
+ description: i18n ? i18n.t("engine.fallbackAction.description", { focus }) : `Identify one task that will improve "${focus}" this week.`,
1325
+ priority: index + 1,
1326
+ estimatedImpact: "low",
1327
+ effortLevel: "s",
1328
+ category: "product"
1329
+ }));
1330
+ };
286
1331
  // src/data/library-stage-map.ts
287
- var libraryStageMap = [
1332
+ function getLocalizedLibraryStageMap(locale) {
1333
+ const i18n = createLifecycleAdvisorI18n(locale);
1334
+ return staticLibraryStageMap.map((entry, stageIdx) => ({
1335
+ ...entry,
1336
+ items: entry.items.map((item, itemIdx) => ({
1337
+ ...item,
1338
+ description: i18n.t(`library.stage${stageIdx}.item${itemIdx}`)
1339
+ }))
1340
+ }));
1341
+ }
1342
+ var staticLibraryStageMap = [
288
1343
  {
289
1344
  stage: 0,
290
1345
  items: [
@@ -391,6 +1446,7 @@ var libraryStageMap = [
391
1446
  ]
392
1447
  }
393
1448
  ];
1449
+ var libraryStageMap = staticLibraryStageMap;
394
1450
  var library_stage_map_default = libraryStageMap;
395
1451
 
396
1452
  // src/recommendations/library-recommender.ts
@@ -401,7 +1457,12 @@ class ContractSpecLibraryRecommender {
401
1457
  constructor(overrides) {
402
1458
  this.mapping = overrides?.length ? new Map(overrides.map((entry) => [entry.stage, entry.items])) : LIBRARY_MAP;
403
1459
  }
404
- recommend(stage, limit = 4) {
1460
+ recommend(stage, limit = 4, locale) {
1461
+ if (locale) {
1462
+ const localized = getLocalizedLibraryStageMap(locale);
1463
+ const entry = localized.find((e) => e.stage === stage);
1464
+ return entry?.items.slice(0, limit) ?? [];
1465
+ }
405
1466
  const items = this.mapping.get(stage);
406
1467
  if (!items?.length)
407
1468
  return [];
@@ -419,11 +1480,18 @@ class LifecycleCeremonyDesigner {
419
1480
  constructor(overrides) {
420
1481
  this.ceremonies = overrides?.length ? new Map(overrides.map((entry) => [entry.stage, entry.ceremony])) : CEREMONY_MAP;
421
1482
  }
422
- design(stage) {
1483
+ design(stage, locale) {
1484
+ if (locale) {
1485
+ const localized = getLocalizedStagePlaybooks(locale);
1486
+ const entry = localized.find((p) => p.stage === stage);
1487
+ return entry?.ceremony;
1488
+ }
423
1489
  return this.ceremonies.get(stage);
424
1490
  }
425
1491
  }
426
1492
  export {
1493
+ getLocalizedStagePlaybooks,
1494
+ getLocalizedLibraryStageMap,
427
1495
  LifecycleRecommendationEngine,
428
1496
  LifecycleCeremonyDesigner,
429
1497
  ContractSpecLibraryRecommender