specleap-framework 2.1.13 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "version": "1.0",
4
- "total_questions": 58,
4
+ "total_questions": 93,
5
5
  "checkpoint_interval": 10,
6
6
  "description": "Cuestionario interactivo para generar CONTRATO.md en SpecLeap"
7
7
  },
@@ -18,7 +18,11 @@
18
18
  ],
19
19
  "required": true,
20
20
  "help": "nuevo = desde cero | existente = adoptar proyecto legacy en SpecLeap",
21
- "example": "nuevo"
21
+ "example": "nuevo",
22
+ "modes": [
23
+ "mvp",
24
+ "serio"
25
+ ]
22
26
  },
23
27
  {
24
28
  "id": "project.path",
@@ -31,7 +35,11 @@
31
35
  "project.type": "nuevo"
32
36
  },
33
37
  "help": "Ruta absoluta o relativa al directorio del proyecto legacy",
34
- "example": "/Users/usuario/mi-proyecto-legacy"
38
+ "example": "/Users/usuario/mi-proyecto-legacy",
39
+ "modes": [
40
+ "mvp",
41
+ "serio"
42
+ ]
35
43
  },
36
44
  {
37
45
  "id": "project.name",
@@ -46,8 +54,12 @@
46
54
  },
47
55
  "required": true,
48
56
  "default": null,
49
- "help": "Ejemplo: mi-tienda-online, api-rest-usuarios, dashboard-admin",
50
- "example": "mi-proyecto"
57
+ "help": "Ejemplo: task-manager, inventory-app, crm-suite",
58
+ "example": "task-manager",
59
+ "modes": [
60
+ "mvp",
61
+ "serio"
62
+ ]
51
63
  },
52
64
  {
53
65
  "id": "project.display_name",
@@ -62,7 +74,11 @@
62
74
  "required": true,
63
75
  "default": null,
64
76
  "help": "El nombre que verán los usuarios. Puede tener mayúsculas, espacios y caracteres especiales.",
65
- "example": "Mi Proyecto Awesome"
77
+ "example": "Task Manager Pro",
78
+ "modes": [
79
+ "mvp",
80
+ "serio"
81
+ ]
66
82
  },
67
83
  {
68
84
  "id": "project.responsible",
@@ -73,7 +89,11 @@
73
89
  "required": true,
74
90
  "default": null,
75
91
  "help": "Nombre del product owner, tech lead o responsable principal.",
76
- "example": "Juan Pérez"
92
+ "example": "María García",
93
+ "modes": [
94
+ "mvp",
95
+ "serio"
96
+ ]
77
97
  },
78
98
  {
79
99
  "id": "identity.objective",
@@ -86,7 +106,11 @@
86
106
  },
87
107
  "required": true,
88
108
  "help": "Descripción breve del propósito principal.",
89
- "example": "Plataforma e-commerce para venta de productos artesanales con gestión de inventario y pagos online"
109
+ "example": "Aplicación web para gestionar tareas en equipo con asignación, prioridades y seguimiento de tiempo",
110
+ "modes": [
111
+ "mvp",
112
+ "serio"
113
+ ]
90
114
  },
91
115
  {
92
116
  "id": "identity.problem_solved",
@@ -99,7 +123,11 @@
99
123
  },
100
124
  "required": true,
101
125
  "help": "El dolor o necesidad que soluciona tu proyecto.",
102
- "example": "Los artesanos no tienen forma fácil de vender online sin conocimientos técnicos ni costos altos"
126
+ "example": "Los equipos pierden tiempo coordinando tareas en herramientas dispersas (email, chat, hojas de cálculo) y no tienen visibilidad clara del progreso",
127
+ "modes": [
128
+ "mvp",
129
+ "serio"
130
+ ]
103
131
  },
104
132
  {
105
133
  "id": "identity.target_audience",
@@ -115,7 +143,11 @@
115
143
  ],
116
144
  "required": true,
117
145
  "help": "personal = solo tú | team = tu equipo | public = cualquiera | niche = audiencia específica",
118
- "example": "public"
146
+ "example": "public",
147
+ "modes": [
148
+ "mvp",
149
+ "serio"
150
+ ]
119
151
  },
120
152
  {
121
153
  "id": "identity.competitors",
@@ -125,8 +157,12 @@
125
157
  "type": "string",
126
158
  "required": false,
127
159
  "default": "",
128
- "help": "Productos similares que te sirven de inspiración.",
129
- "example": "Shopify, WooCommerce, Etsy"
160
+ "help": "Si conoces apps similares, las usaré como referencia para sugerir features y patrones de UX. Si no, escribe `ninguno` o déjalo vacío.",
161
+ "example": "Notion, Trello, Linear",
162
+ "modes": [
163
+ "mvp",
164
+ "serio"
165
+ ]
130
166
  },
131
167
  {
132
168
  "id": "stack.backend.framework",
@@ -144,7 +180,11 @@
144
180
  ],
145
181
  "required": true,
146
182
  "help": "Framework principal para el servidor.",
147
- "example": "laravel"
183
+ "example": "laravel",
184
+ "modes": [
185
+ "mvp",
186
+ "serio"
187
+ ]
148
188
  },
149
189
  {
150
190
  "id": "stack.backend.language",
@@ -161,7 +201,11 @@
161
201
  "python": "Python 3.11",
162
202
  "django": "Python 3.11",
163
203
  "rails": "Ruby 3.2"
164
- }
204
+ },
205
+ "modes": [
206
+ "mvp",
207
+ "serio"
208
+ ]
165
209
  },
166
210
  {
167
211
  "id": "stack.backend.version",
@@ -178,7 +222,11 @@
178
222
  "python": "3.11",
179
223
  "django": "5.x",
180
224
  "rails": "7.x"
181
- }
225
+ },
226
+ "modes": [
227
+ "mvp",
228
+ "serio"
229
+ ]
182
230
  },
183
231
  {
184
232
  "id": "stack.database.engine",
@@ -195,7 +243,11 @@
195
243
  ],
196
244
  "required": true,
197
245
  "help": "Base de datos principal del proyecto.",
198
- "example": "postgresql"
246
+ "example": "postgresql",
247
+ "modes": [
248
+ "mvp",
249
+ "serio"
250
+ ]
199
251
  },
200
252
  {
201
253
  "id": "stack.database.version",
@@ -211,7 +263,11 @@
211
263
  "mysql": "8.0",
212
264
  "mongodb": "7.x",
213
265
  "sqlite": "3.x"
214
- }
266
+ },
267
+ "modes": [
268
+ "mvp",
269
+ "serio"
270
+ ]
215
271
  },
216
272
  {
217
273
  "id": "stack.frontend.framework",
@@ -229,7 +285,11 @@
229
285
  ],
230
286
  "required": true,
231
287
  "help": "ninguno = solo backend/API sin interfaz visual.",
232
- "example": "react"
288
+ "example": "react",
289
+ "modes": [
290
+ "mvp",
291
+ "serio"
292
+ ]
233
293
  },
234
294
  {
235
295
  "id": "stack.frontend.language",
@@ -246,7 +306,11 @@
246
306
  "stack.frontend.framework": "none"
247
307
  },
248
308
  "help": "TypeScript es recomendado para proyectos medianos/grandes.",
249
- "example": "typescript"
309
+ "example": "typescript",
310
+ "modes": [
311
+ "mvp",
312
+ "serio"
313
+ ]
250
314
  },
251
315
  {
252
316
  "id": "stack.frontend.build_tool",
@@ -265,7 +329,11 @@
265
329
  "stack.frontend.framework": "none"
266
330
  },
267
331
  "help": "Vite es el más rápido y moderno (recomendado).",
268
- "example": "vite"
332
+ "example": "vite",
333
+ "modes": [
334
+ "mvp",
335
+ "serio"
336
+ ]
269
337
  },
270
338
  {
271
339
  "id": "stack.frontend.ui_library",
@@ -286,7 +354,11 @@
286
354
  "stack.frontend.framework": "none"
287
355
  },
288
356
  "help": "Tailwind es utility-first y muy popular actualmente.",
289
- "example": "tailwind"
357
+ "example": "tailwind",
358
+ "modes": [
359
+ "mvp",
360
+ "serio"
361
+ ]
290
362
  },
291
363
  {
292
364
  "id": "stack.devops.hosting",
@@ -305,7 +377,11 @@
305
377
  ],
306
378
  "required": true,
307
379
  "help": "Proveedor de hosting/cloud.",
308
- "example": "digitalocean"
380
+ "example": "digitalocean",
381
+ "modes": [
382
+ "mvp",
383
+ "serio"
384
+ ]
309
385
  },
310
386
  {
311
387
  "id": "stack.devops.ci_cd",
@@ -321,7 +397,11 @@
321
397
  ],
322
398
  "required": true,
323
399
  "help": "Sistema de integración continua y despliegue automático.",
324
- "example": "github-actions"
400
+ "example": "github-actions",
401
+ "modes": [
402
+ "mvp",
403
+ "serio"
404
+ ]
325
405
  },
326
406
  {
327
407
  "id": "stack.devops.containers",
@@ -336,7 +416,11 @@
336
416
  ],
337
417
  "required": true,
338
418
  "help": "Docker para desarrollo, Kubernetes para producción escalable.",
339
- "example": "docker"
419
+ "example": "docker",
420
+ "modes": [
421
+ "mvp",
422
+ "serio"
423
+ ]
340
424
  },
341
425
  {
342
426
  "id": "features.core",
@@ -351,7 +435,11 @@
351
435
  },
352
436
  "required": true,
353
437
  "help": "Las funcionalidades ESENCIALES que DEBE tener el MVP.",
354
- "example": "Autenticación de usuarios, Dashboard, Gestión de productos, Carrito de compras, Checkout"
438
+ "example": "Autenticación de usuarios, Dashboard, CRUD de entidades principales, Búsqueda y filtros, Notificaciones",
439
+ "modes": [
440
+ "mvp",
441
+ "serio"
442
+ ]
355
443
  },
356
444
  {
357
445
  "id": "features.secondary",
@@ -367,7 +455,11 @@
367
455
  "required": false,
368
456
  "default": [],
369
457
  "help": "Funcionalidades deseables pero no críticas para el MVP.",
370
- "example": "Chat en vivo, Sistema de reseñas, Recomendaciones personalizadas"
458
+ "example": "Exportar a CSV, Modo oscuro, Atajos de teclado, Integraciones con apps externas",
459
+ "modes": [
460
+ "mvp",
461
+ "serio"
462
+ ]
371
463
  },
372
464
  {
373
465
  "id": "features.auth.enabled",
@@ -377,7 +469,11 @@
377
469
  "type": "boolean",
378
470
  "required": true,
379
471
  "help": "¿Los usuarios deben poder registrarse y hacer login?",
380
- "example": "sí"
472
+ "example": "sí",
473
+ "modes": [
474
+ "mvp",
475
+ "serio"
476
+ ]
381
477
  },
382
478
  {
383
479
  "id": "features.auth.methods",
@@ -397,7 +493,11 @@
397
493
  },
398
494
  "required": false,
399
495
  "help": "email_password es el mínimo. OAuth agrega login con redes sociales.",
400
- "example": "email_password, oauth_google"
496
+ "example": "email_password, oauth_google",
497
+ "modes": [
498
+ "mvp",
499
+ "serio"
500
+ ]
401
501
  },
402
502
  {
403
503
  "id": "features.auth.two_factor",
@@ -411,7 +511,11 @@
411
511
  "required": false,
412
512
  "default": false,
413
513
  "help": "Seguridad adicional mediante código SMS/app.",
414
- "example": "no"
514
+ "example": "no",
515
+ "modes": [
516
+ "mvp",
517
+ "serio"
518
+ ]
415
519
  },
416
520
  {
417
521
  "id": "users.registration",
@@ -421,7 +525,11 @@
421
525
  "type": "boolean",
422
526
  "required": true,
423
527
  "help": "Si es false, los usuarios deben ser creados manualmente por admin.",
424
- "example": "sí"
528
+ "example": "sí",
529
+ "modes": [
530
+ "mvp",
531
+ "serio"
532
+ ]
425
533
  },
426
534
  {
427
535
  "id": "users.roles",
@@ -436,7 +544,11 @@
436
544
  },
437
545
  "required": true,
438
546
  "help": "Tipos de usuarios con diferentes permisos.",
439
- "example": "admin, user, guest"
547
+ "example": "admin, user, guest",
548
+ "modes": [
549
+ "mvp",
550
+ "serio"
551
+ ]
440
552
  },
441
553
  {
442
554
  "id": "features.admin_panel.enabled",
@@ -446,7 +558,11 @@
446
558
  "type": "boolean",
447
559
  "required": true,
448
560
  "help": "Interfaz para gestionar usuarios, contenido, configuración.",
449
- "example": "sí"
561
+ "example": "sí",
562
+ "modes": [
563
+ "mvp",
564
+ "serio"
565
+ ]
450
566
  },
451
567
  {
452
568
  "id": "features.admin_panel.level",
@@ -464,7 +580,11 @@
464
580
  },
465
581
  "required": false,
466
582
  "help": "completo = CRUD completo | básico = solo visualización | ninguno = sin panel",
467
- "example": "completo"
583
+ "example": "completo",
584
+ "modes": [
585
+ "mvp",
586
+ "serio"
587
+ ]
468
588
  },
469
589
  {
470
590
  "id": "features.file_uploads.enabled",
@@ -474,7 +594,11 @@
474
594
  "type": "boolean",
475
595
  "required": true,
476
596
  "help": "¿Los usuarios pueden subir archivos?",
477
- "example": "sí"
597
+ "example": "sí",
598
+ "modes": [
599
+ "mvp",
600
+ "serio"
601
+ ]
478
602
  },
479
603
  {
480
604
  "id": "features.file_uploads.storage",
@@ -493,7 +617,11 @@
493
617
  },
494
618
  "required": false,
495
619
  "help": "local = en el servidor | s3/cloudinary = cloud storage",
496
- "example": "s3"
620
+ "example": "s3",
621
+ "modes": [
622
+ "mvp",
623
+ "serio"
624
+ ]
497
625
  },
498
626
  {
499
627
  "id": "features.payments.enabled",
@@ -503,7 +631,11 @@
503
631
  "type": "boolean",
504
632
  "required": true,
505
633
  "help": "¿Los usuarios pagarán dentro de la plataforma?",
506
- "example": "sí"
634
+ "example": "sí",
635
+ "modes": [
636
+ "mvp",
637
+ "serio"
638
+ ]
507
639
  },
508
640
  {
509
641
  "id": "features.payments.providers",
@@ -523,7 +655,11 @@
523
655
  },
524
656
  "required": false,
525
657
  "help": "Stripe es el más usado y completo.",
526
- "example": "stripe, paypal"
658
+ "example": "stripe, paypal",
659
+ "modes": [
660
+ "mvp",
661
+ "serio"
662
+ ]
527
663
  },
528
664
  {
529
665
  "id": "features.notifications.email",
@@ -533,7 +669,11 @@
533
669
  "type": "boolean",
534
670
  "required": true,
535
671
  "help": "Envío de emails automáticos (bienvenida, recuperación password, etc.).",
536
- "example": "sí"
672
+ "example": "sí",
673
+ "modes": [
674
+ "mvp",
675
+ "serio"
676
+ ]
537
677
  },
538
678
  {
539
679
  "id": "features.notifications.push",
@@ -543,7 +683,11 @@
543
683
  "type": "boolean",
544
684
  "required": true,
545
685
  "help": "Notificaciones en navegador o app móvil.",
546
- "example": "no"
686
+ "example": "no",
687
+ "modes": [
688
+ "mvp",
689
+ "serio"
690
+ ]
547
691
  },
548
692
  {
549
693
  "id": "features.notifications.in_app",
@@ -553,7 +697,11 @@
553
697
  "type": "boolean",
554
698
  "required": true,
555
699
  "help": "Notificaciones dentro de la interfaz (campana con contador).",
556
- "example": "sí"
700
+ "example": "sí",
701
+ "modes": [
702
+ "mvp",
703
+ "serio"
704
+ ]
557
705
  },
558
706
  {
559
707
  "id": "design.visual_style",
@@ -570,7 +718,11 @@
570
718
  ],
571
719
  "required": true,
572
720
  "help": "Estética general de la interfaz.",
573
- "example": "modern"
721
+ "example": "modern",
722
+ "modes": [
723
+ "mvp",
724
+ "serio"
725
+ ]
574
726
  },
575
727
  {
576
728
  "id": "design.primary_color",
@@ -584,7 +736,11 @@
584
736
  "required": false,
585
737
  "default": "#3B82F6",
586
738
  "help": "Color principal de la marca (botones, enlaces, etc.).",
587
- "example": "#3B82F6"
739
+ "example": "#3B82F6",
740
+ "modes": [
741
+ "mvp",
742
+ "serio"
743
+ ]
588
744
  },
589
745
  {
590
746
  "id": "design.dark_mode",
@@ -594,7 +750,11 @@
594
750
  "type": "boolean",
595
751
  "required": true,
596
752
  "help": "Tema dark alternativo.",
597
- "example": "no"
753
+ "example": "no",
754
+ "modes": [
755
+ "mvp",
756
+ "serio"
757
+ ]
598
758
  },
599
759
  {
600
760
  "id": "design.responsive",
@@ -604,7 +764,11 @@
604
764
  "type": "boolean",
605
765
  "required": true,
606
766
  "help": "Adaptación a todos los tamaños de pantalla.",
607
- "example": "sí"
767
+ "example": "sí",
768
+ "modes": [
769
+ "mvp",
770
+ "serio"
771
+ ]
608
772
  },
609
773
  {
610
774
  "id": "architecture.pattern",
@@ -621,7 +785,11 @@
621
785
  ],
622
786
  "required": true,
623
787
  "help": "mvc = Model-View-Controller (Laravel default) | ddd = Domain-Driven Design",
624
- "example": "mvc"
788
+ "example": "mvc",
789
+ "modes": [
790
+ "mvp",
791
+ "serio"
792
+ ]
625
793
  },
626
794
  {
627
795
  "id": "architecture.separation",
@@ -636,7 +804,11 @@
636
804
  ],
637
805
  "required": true,
638
806
  "help": "monolith = todo junto | separated = API + frontend separados | microservices = servicios independientes",
639
- "example": "separated"
807
+ "example": "separated",
808
+ "modes": [
809
+ "mvp",
810
+ "serio"
811
+ ]
640
812
  },
641
813
  {
642
814
  "id": "deployment.ssl",
@@ -646,7 +818,11 @@
646
818
  "type": "boolean",
647
819
  "required": true,
648
820
  "help": "Siempre recomendado para producción.",
649
- "example": "sí"
821
+ "example": "sí",
822
+ "modes": [
823
+ "mvp",
824
+ "serio"
825
+ ]
650
826
  },
651
827
  {
652
828
  "id": "deployment.custom_domain",
@@ -657,7 +833,11 @@
657
833
  "required": false,
658
834
  "default": "",
659
835
  "help": "Ejemplo: www.mitienda.com",
660
- "example": "www.miproyecto.com"
836
+ "example": "www.miproyecto.com",
837
+ "modes": [
838
+ "mvp",
839
+ "serio"
840
+ ]
661
841
  },
662
842
  {
663
843
  "id": "deployment.environments",
@@ -672,7 +852,11 @@
672
852
  },
673
853
  "required": true,
674
854
  "help": "Típicamente: development, staging, production",
675
- "example": "development, staging, production"
855
+ "example": "development, staging, production",
856
+ "modes": [
857
+ "mvp",
858
+ "serio"
859
+ ]
676
860
  },
677
861
  {
678
862
  "id": "security.level",
@@ -687,7 +871,11 @@
687
871
  ],
688
872
  "required": true,
689
873
  "help": "básico = estándar | medio = + auditoría | alto = + encriptación end-to-end",
690
- "example": "medio"
874
+ "example": "medio",
875
+ "modes": [
876
+ "mvp",
877
+ "serio"
878
+ ]
691
879
  },
692
880
  {
693
881
  "id": "security.gdpr_compliant",
@@ -697,7 +885,11 @@
697
885
  "type": "boolean",
698
886
  "required": true,
699
887
  "help": "Requerido si tienes usuarios en Europa.",
700
- "example": "sí"
888
+ "example": "sí",
889
+ "modes": [
890
+ "mvp",
891
+ "serio"
892
+ ]
701
893
  },
702
894
  {
703
895
  "id": "security.sensitive_data",
@@ -707,7 +899,11 @@
707
899
  "type": "boolean",
708
900
  "required": true,
709
901
  "help": "Requiere seguridad adicional y cumplimiento normativo.",
710
- "example": "no"
902
+ "example": "no",
903
+ "modes": [
904
+ "mvp",
905
+ "serio"
906
+ ]
711
907
  },
712
908
  {
713
909
  "id": "performance.load_time_target",
@@ -723,7 +919,11 @@
723
919
  ],
724
920
  "required": true,
725
921
  "help": "Tiempo de carga inicial de la página principal.",
726
- "example": "< 2s"
922
+ "example": "< 2s",
923
+ "modes": [
924
+ "mvp",
925
+ "serio"
926
+ ]
727
927
  },
728
928
  {
729
929
  "id": "performance.api_response_target",
@@ -739,7 +939,11 @@
739
939
  ],
740
940
  "required": true,
741
941
  "help": "Tiempo de respuesta de endpoints críticos.",
742
- "example": "< 200ms"
942
+ "example": "< 200ms",
943
+ "modes": [
944
+ "mvp",
945
+ "serio"
946
+ ]
743
947
  },
744
948
  {
745
949
  "id": "performance.concurrent_users",
@@ -753,7 +957,11 @@
753
957
  },
754
958
  "required": true,
755
959
  "help": "Cuántos usuarios simultáneos esperas al lanzar.",
756
- "example": "100"
960
+ "example": "100",
961
+ "modes": [
962
+ "mvp",
963
+ "serio"
964
+ ]
757
965
  },
758
966
  {
759
967
  "id": "testing.unit",
@@ -763,7 +971,11 @@
763
971
  "type": "boolean",
764
972
  "required": true,
765
973
  "help": "Tests de funciones y clases individuales.",
766
- "example": "sí"
974
+ "example": "sí",
975
+ "modes": [
976
+ "mvp",
977
+ "serio"
978
+ ]
767
979
  },
768
980
  {
769
981
  "id": "testing.integration",
@@ -773,7 +985,11 @@
773
985
  "type": "boolean",
774
986
  "required": true,
775
987
  "help": "Tests de interacción entre módulos/APIs.",
776
- "example": "sí"
988
+ "example": "sí",
989
+ "modes": [
990
+ "mvp",
991
+ "serio"
992
+ ]
777
993
  },
778
994
  {
779
995
  "id": "testing.e2e",
@@ -783,7 +999,11 @@
783
999
  "type": "boolean",
784
1000
  "required": true,
785
1001
  "help": "Tests de flujos completos de usuario (Playwright, Cypress).",
786
- "example": "no"
1002
+ "example": "no",
1003
+ "modes": [
1004
+ "mvp",
1005
+ "serio"
1006
+ ]
787
1007
  },
788
1008
  {
789
1009
  "id": "testing.coverage_target",
@@ -798,7 +1018,11 @@
798
1018
  "required": false,
799
1019
  "default": 0,
800
1020
  "help": "Porcentaje de código cubierto por tests. 80% es buen objetivo.",
801
- "example": "80"
1021
+ "example": "80",
1022
+ "modes": [
1023
+ "mvp",
1024
+ "serio"
1025
+ ]
802
1026
  },
803
1027
  {
804
1028
  "id": "constraints.time_limit",
@@ -809,7 +1033,11 @@
809
1033
  "required": false,
810
1034
  "default": "",
811
1035
  "help": "Ejemplo: 2 weeks, 3 months, none",
812
- "example": "3 months"
1036
+ "example": "3 months",
1037
+ "modes": [
1038
+ "mvp",
1039
+ "serio"
1040
+ ]
813
1041
  },
814
1042
  {
815
1043
  "id": "constraints.out_of_scope",
@@ -825,7 +1053,589 @@
825
1053
  "required": false,
826
1054
  "default": [],
827
1055
  "help": "Funcionalidades explícitamente excluidas del proyecto.",
828
- "example": "Integración con redes sociales, App móvil nativa, Soporte multiidioma"
1056
+ "example": "Integración con redes sociales, App móvil nativa, Soporte multiidioma",
1057
+ "modes": [
1058
+ "mvp",
1059
+ "serio"
1060
+ ]
1061
+ },
1062
+ {
1063
+ "id": "governance.product_owner",
1064
+ "section": "Gobernanza",
1065
+ "text": "¿Quién es el Product Owner?",
1066
+ "type": "string",
1067
+ "required": true,
1068
+ "modes": [
1069
+ "serio"
1070
+ ],
1071
+ "help": "Persona responsable del backlog, prioridades y visión del producto. Indica nombre y email.",
1072
+ "example": "María García - maria@empresa.com",
1073
+ "number": 59
1074
+ },
1075
+ {
1076
+ "id": "governance.tech_lead",
1077
+ "section": "Gobernanza",
1078
+ "text": "¿Quién es el Tech Lead?",
1079
+ "type": "string",
1080
+ "required": true,
1081
+ "modes": [
1082
+ "serio"
1083
+ ],
1084
+ "help": "Persona responsable de decisiones técnicas, arquitectura y revisión de código.",
1085
+ "example": "Carlos López - carlos@empresa.com",
1086
+ "number": 60
1087
+ },
1088
+ {
1089
+ "id": "governance.release_approver",
1090
+ "section": "Gobernanza",
1091
+ "text": "¿Quién aprueba un release a producción?",
1092
+ "type": "string",
1093
+ "required": true,
1094
+ "modes": [
1095
+ "serio"
1096
+ ],
1097
+ "help": "Roles o nombres con autoridad para aprobar el deploy a producción.",
1098
+ "example": "Tech Lead + Product Owner",
1099
+ "number": 61
1100
+ },
1101
+ {
1102
+ "id": "governance.security_approver",
1103
+ "section": "Gobernanza",
1104
+ "text": "¿Hay aprobación obligatoria de Security/InfoSec? Si sí, ¿quién?",
1105
+ "type": "string",
1106
+ "required": false,
1107
+ "modes": [
1108
+ "serio"
1109
+ ],
1110
+ "help": "Si tu organización requiere review de seguridad para releases o features sensibles, indica el rol/equipo. Si no, escribe 'ninguno'.",
1111
+ "example": "InfoSec Team - security@empresa.com",
1112
+ "default": "ninguno",
1113
+ "number": 62
1114
+ },
1115
+ {
1116
+ "id": "governance.legal_approver",
1117
+ "section": "Gobernanza",
1118
+ "text": "¿Hay aprobación obligatoria de Legal/Compliance? Si sí, ¿quién?",
1119
+ "type": "string",
1120
+ "required": false,
1121
+ "modes": [
1122
+ "serio"
1123
+ ],
1124
+ "help": "Útil si manejas datos personales, contratos o normativa específica. Si no, escribe 'ninguno'.",
1125
+ "example": "Legal Dept - legal@empresa.com",
1126
+ "default": "ninguno",
1127
+ "number": 63
1128
+ },
1129
+ {
1130
+ "id": "departments.list",
1131
+ "section": "Departamentos Involucrados",
1132
+ "text": "Departamentos involucrados (separados por coma)",
1133
+ "type": "multiselect",
1134
+ "required": true,
1135
+ "modes": [
1136
+ "serio"
1137
+ ],
1138
+ "help": "Áreas funcionales que usan, alimentan o dependen del producto.",
1139
+ "example": "Ventas, Soporte, Operaciones",
1140
+ "options": [
1141
+ "Ventas",
1142
+ "Marketing",
1143
+ "RRHH",
1144
+ "Contabilidad",
1145
+ "IT",
1146
+ "Soporte",
1147
+ "Operaciones",
1148
+ "Producto",
1149
+ "Diseño",
1150
+ "Legal",
1151
+ "otro"
1152
+ ],
1153
+ "number": 64
1154
+ },
1155
+ {
1156
+ "id": "departments.key_contacts",
1157
+ "section": "Departamentos Involucrados",
1158
+ "text": "Contactos clave por departamento",
1159
+ "type": "text",
1160
+ "required": false,
1161
+ "modes": [
1162
+ "serio"
1163
+ ],
1164
+ "help": "Una línea por departamento con persona y rol. Ayuda a saber a quién consultar para decisiones de cada área.",
1165
+ "example": "Ventas: Ana López (Sales Ops); Soporte: Juan Ruiz (Lead)",
1166
+ "default": "",
1167
+ "number": 65
1168
+ },
1169
+ {
1170
+ "id": "departments.dependencies",
1171
+ "section": "Departamentos Involucrados",
1172
+ "text": "Dependencias críticas entre departamentos (opcional)",
1173
+ "type": "text",
1174
+ "required": false,
1175
+ "modes": [
1176
+ "serio"
1177
+ ],
1178
+ "help": "Flujos donde el avance de un equipo depende de otro. Útil para anticipar bloqueos.",
1179
+ "example": "Marketing necesita la API de Ventas para los dashboards de campañas",
1180
+ "default": "",
1181
+ "number": 66
1182
+ },
1183
+ {
1184
+ "id": "integrations.sso",
1185
+ "section": "Integraciones Empresariales",
1186
+ "text": "¿SSO/SAML/LDAP? (selecciona los que apliquen)",
1187
+ "type": "multiselect",
1188
+ "required": true,
1189
+ "modes": [
1190
+ "serio"
1191
+ ],
1192
+ "help": "Sistemas de identidad corporativos que el producto debe soportar para login.",
1193
+ "example": "Google Workspace, Okta",
1194
+ "options": [
1195
+ "ninguno",
1196
+ "Google Workspace",
1197
+ "Microsoft AD/Entra",
1198
+ "Okta",
1199
+ "Auth0",
1200
+ "SAML genérico",
1201
+ "LDAP",
1202
+ "otro"
1203
+ ],
1204
+ "number": 67
1205
+ },
1206
+ {
1207
+ "id": "integrations.erp",
1208
+ "section": "Integraciones Empresariales",
1209
+ "text": "¿Integración con ERP?",
1210
+ "type": "string",
1211
+ "required": false,
1212
+ "modes": [
1213
+ "serio"
1214
+ ],
1215
+ "help": "Sistema de gestión empresarial al que sincronizar datos. Escribe 'ninguno' si no aplica.",
1216
+ "example": "SAP S/4HANA",
1217
+ "default": "ninguno",
1218
+ "number": 68
1219
+ },
1220
+ {
1221
+ "id": "integrations.crm",
1222
+ "section": "Integraciones Empresariales",
1223
+ "text": "¿Integración con CRM?",
1224
+ "type": "string",
1225
+ "required": false,
1226
+ "modes": [
1227
+ "serio"
1228
+ ],
1229
+ "help": "CRM con el que sincronizar contactos, oportunidades, etc. Escribe 'ninguno' si no aplica.",
1230
+ "example": "HubSpot",
1231
+ "default": "ninguno",
1232
+ "number": 69
1233
+ },
1234
+ {
1235
+ "id": "integrations.bi",
1236
+ "section": "Integraciones Empresariales",
1237
+ "text": "¿Integración con BI/Data Warehouse?",
1238
+ "type": "string",
1239
+ "required": false,
1240
+ "modes": [
1241
+ "serio"
1242
+ ],
1243
+ "help": "Plataforma de analytics o data warehouse para reporting. Escribe 'ninguno' si no aplica.",
1244
+ "example": "Snowflake + Tableau",
1245
+ "default": "ninguno",
1246
+ "number": 70
1247
+ },
1248
+ {
1249
+ "id": "integrations.payroll",
1250
+ "section": "Integraciones Empresariales",
1251
+ "text": "¿Integración con sistemas de payroll/HR? (opcional)",
1252
+ "type": "string",
1253
+ "required": false,
1254
+ "modes": [
1255
+ "serio"
1256
+ ],
1257
+ "help": "Solo aplica si el producto interactúa con nóminas o RRHH. Escribe 'ninguno' si no aplica.",
1258
+ "example": "Workday",
1259
+ "default": "ninguno",
1260
+ "number": 71
1261
+ },
1262
+ {
1263
+ "id": "sla.uptime_target",
1264
+ "section": "SLAs y Resiliencia",
1265
+ "text": "Uptime target",
1266
+ "type": "select",
1267
+ "required": true,
1268
+ "modes": [
1269
+ "serio"
1270
+ ],
1271
+ "help": "Disponibilidad mínima comprometida. Más nueves = más coste e inversión en redundancia.",
1272
+ "example": "99.9%",
1273
+ "options": [
1274
+ "99.0%",
1275
+ "99.5%",
1276
+ "99.9%",
1277
+ "99.95%",
1278
+ "99.99%"
1279
+ ],
1280
+ "number": 72
1281
+ },
1282
+ {
1283
+ "id": "sla.rto",
1284
+ "section": "SLAs y Resiliencia",
1285
+ "text": "RTO (Recovery Time Objective)",
1286
+ "type": "select",
1287
+ "required": true,
1288
+ "modes": [
1289
+ "serio"
1290
+ ],
1291
+ "help": "Tiempo máximo aceptable para restaurar el servicio tras un incidente grave.",
1292
+ "example": "< 4h",
1293
+ "options": [
1294
+ "< 1h",
1295
+ "< 4h",
1296
+ "< 24h",
1297
+ "< 72h"
1298
+ ],
1299
+ "number": 73
1300
+ },
1301
+ {
1302
+ "id": "sla.rpo",
1303
+ "section": "SLAs y Resiliencia",
1304
+ "text": "RPO (Recovery Point Objective)",
1305
+ "type": "select",
1306
+ "required": true,
1307
+ "modes": [
1308
+ "serio"
1309
+ ],
1310
+ "help": "Cantidad máxima de datos que puedes permitirte perder en un incidente.",
1311
+ "example": "< 1h",
1312
+ "options": [
1313
+ "< 15min",
1314
+ "< 1h",
1315
+ "< 24h",
1316
+ "< 7d"
1317
+ ],
1318
+ "number": 74
1319
+ },
1320
+ {
1321
+ "id": "sla.disaster_recovery",
1322
+ "section": "SLAs y Resiliencia",
1323
+ "text": "Estrategia de Disaster Recovery",
1324
+ "type": "select",
1325
+ "required": true,
1326
+ "modes": [
1327
+ "serio"
1328
+ ],
1329
+ "help": "Cómo te recuperas si la región/proveedor principal cae. Coste y complejidad crecen hacia la derecha.",
1330
+ "example": "hot-standby",
1331
+ "options": [
1332
+ "ninguna",
1333
+ "backup-restore",
1334
+ "hot-standby",
1335
+ "multi-region activo-pasivo",
1336
+ "multi-region activo-activo"
1337
+ ],
1338
+ "number": 75
1339
+ },
1340
+ {
1341
+ "id": "sla.on_call",
1342
+ "section": "SLAs y Resiliencia",
1343
+ "text": "¿Equipo on-call 24/7? Si sí, ¿qué tooling?",
1344
+ "type": "string",
1345
+ "required": false,
1346
+ "modes": [
1347
+ "serio"
1348
+ ],
1349
+ "help": "Si hay rotación de guardias, indica la herramienta (PagerDuty, Opsgenie, etc.). Si no, escribe 'no'.",
1350
+ "example": "PagerDuty",
1351
+ "default": "no",
1352
+ "number": 76
1353
+ },
1354
+ {
1355
+ "id": "compliance.frameworks",
1356
+ "section": "Compliance",
1357
+ "text": "Frameworks de compliance aplicables (selecciona los que apliquen)",
1358
+ "type": "multiselect",
1359
+ "required": true,
1360
+ "modes": [
1361
+ "serio"
1362
+ ],
1363
+ "help": "Marcos regulatorios que tu producto debe cumplir. Determina controles, auditorías y documentación necesarios.",
1364
+ "example": "GDPR, SOC2",
1365
+ "options": [
1366
+ "ninguno",
1367
+ "GDPR",
1368
+ "HIPAA",
1369
+ "PCI-DSS",
1370
+ "SOC2",
1371
+ "ISO27001",
1372
+ "FedRAMP",
1373
+ "otro"
1374
+ ],
1375
+ "number": 77
1376
+ },
1377
+ {
1378
+ "id": "compliance.dpo",
1379
+ "section": "Compliance",
1380
+ "text": "¿DPO designado? (requerido si GDPR aplica)",
1381
+ "type": "string",
1382
+ "required": false,
1383
+ "modes": [
1384
+ "serio"
1385
+ ],
1386
+ "help": "Data Protection Officer. Obligatorio si tratas datos personales bajo GDPR a gran escala. Indica nombre y email, o 'ninguno'.",
1387
+ "example": "Lucía Martín - dpo@empresa.com",
1388
+ "default": "ninguno",
1389
+ "number": 78
1390
+ },
1391
+ {
1392
+ "id": "compliance.audit_log_retention",
1393
+ "section": "Compliance",
1394
+ "text": "Retención de logs de auditoría",
1395
+ "type": "select",
1396
+ "required": true,
1397
+ "modes": [
1398
+ "serio"
1399
+ ],
1400
+ "help": "Período mínimo que conservas logs de actividad para auditoría. Más tiempo = más coste de almacenamiento.",
1401
+ "example": "1 año",
1402
+ "options": [
1403
+ "30 días",
1404
+ "90 días",
1405
+ "1 año",
1406
+ "7 años",
1407
+ "indefinida"
1408
+ ],
1409
+ "number": 79
1410
+ },
1411
+ {
1412
+ "id": "compliance.data_residency",
1413
+ "section": "Compliance",
1414
+ "text": "Residencia de datos",
1415
+ "type": "select",
1416
+ "required": true,
1417
+ "modes": [
1418
+ "serio"
1419
+ ],
1420
+ "help": "Dónde pueden almacenarse los datos. GDPR y otros frameworks pueden imponer restricciones geográficas.",
1421
+ "example": "solo EU",
1422
+ "options": [
1423
+ "cualquiera",
1424
+ "solo EU",
1425
+ "solo US",
1426
+ "multi-región según cliente"
1427
+ ],
1428
+ "number": 80
1429
+ },
1430
+ {
1431
+ "id": "roadmap.phases",
1432
+ "section": "Roadmap por Fases",
1433
+ "text": "Fases del proyecto",
1434
+ "type": "text",
1435
+ "required": true,
1436
+ "modes": [
1437
+ "serio"
1438
+ ],
1439
+ "help": "Lista las fases con su duración estimada y los entregables principales de cada una.",
1440
+ "example": "Fase 1 (3 meses): MVP con auth, dashboard, CRUD core. Fase 2 (2 meses): integraciones SSO + CRM. Fase 3 (2 meses): multi-tenant + i18n.",
1441
+ "number": 81
1442
+ },
1443
+ {
1444
+ "id": "roadmap.milestones",
1445
+ "section": "Roadmap por Fases",
1446
+ "text": "Hitos críticos con fechas",
1447
+ "type": "text",
1448
+ "required": true,
1449
+ "modes": [
1450
+ "serio"
1451
+ ],
1452
+ "help": "Fechas clave: lanzamientos, demos a stakeholders, auditorías, fechas de cumplimiento legal, etc.",
1453
+ "example": "2026-06-30: demo a inversores. 2026-09-15: lanzamiento beta cerrada. 2026-12-01: GA pública.",
1454
+ "number": 82
1455
+ },
1456
+ {
1457
+ "id": "roadmap.cross_team_deps",
1458
+ "section": "Roadmap por Fases",
1459
+ "text": "Dependencias inter-equipo (opcional)",
1460
+ "type": "text",
1461
+ "required": false,
1462
+ "modes": [
1463
+ "serio"
1464
+ ],
1465
+ "help": "Bloqueos que dependen de otros equipos: APIs externas pendientes, hardware, datos, aprobaciones legales, etc.",
1466
+ "example": "Equipo Data prepara el modelo de scoring antes de Fase 2. Legal aprueba los términos antes del beta.",
1467
+ "default": "",
1468
+ "number": 83
1469
+ },
1470
+ {
1471
+ "id": "release.feature_flags",
1472
+ "section": "Procesos de Release",
1473
+ "text": "¿Usas feature flags? Si sí, ¿qué tooling?",
1474
+ "type": "string",
1475
+ "required": false,
1476
+ "modes": [
1477
+ "serio"
1478
+ ],
1479
+ "help": "Las feature flags permiten desplegar código desactivado y activarlo selectivamente. Indica el tooling (LaunchDarkly, Unleash, propio) o 'no'.",
1480
+ "example": "LaunchDarkly",
1481
+ "default": "no",
1482
+ "number": 84
1483
+ },
1484
+ {
1485
+ "id": "release.deploy_strategy",
1486
+ "section": "Procesos de Release",
1487
+ "text": "Estrategia de deploy",
1488
+ "type": "select",
1489
+ "required": true,
1490
+ "modes": [
1491
+ "serio"
1492
+ ],
1493
+ "help": "standard = downtime breve | blue-green = sin downtime, doble infra | canary = % gradual de usuarios | rolling = nodos uno a uno",
1494
+ "example": "blue-green",
1495
+ "options": [
1496
+ "standard",
1497
+ "blue-green",
1498
+ "canary",
1499
+ "rolling"
1500
+ ],
1501
+ "number": 85
1502
+ },
1503
+ {
1504
+ "id": "release.rollback_strategy",
1505
+ "section": "Procesos de Release",
1506
+ "text": "¿Plan de rollback automatizado?",
1507
+ "type": "string",
1508
+ "required": true,
1509
+ "modes": [
1510
+ "serio"
1511
+ ],
1512
+ "help": "Cómo revertís un release defectuoso: rollback automático por métrica, manual por botón, redeploy de versión anterior, etc.",
1513
+ "example": "rollback automático si error rate > 1% durante 5min",
1514
+ "number": 86
1515
+ },
1516
+ {
1517
+ "id": "observability.apm_logs_metrics",
1518
+ "section": "Observabilidad",
1519
+ "text": "Stack de observabilidad (APM, logs, métricas)",
1520
+ "type": "multiselect",
1521
+ "required": true,
1522
+ "modes": [
1523
+ "serio"
1524
+ ],
1525
+ "help": "Herramientas usadas para monitorizar el sistema en producción.",
1526
+ "example": "Datadog, Sentry",
1527
+ "options": [
1528
+ "Datadog",
1529
+ "New Relic",
1530
+ "Sentry",
1531
+ "Grafana",
1532
+ "ELK/OpenSearch",
1533
+ "Splunk",
1534
+ "CloudWatch",
1535
+ "ninguno",
1536
+ "otro"
1537
+ ],
1538
+ "number": 87
1539
+ },
1540
+ {
1541
+ "id": "observability.alerting",
1542
+ "section": "Observabilidad",
1543
+ "text": "Sistema de alertas",
1544
+ "type": "string",
1545
+ "required": true,
1546
+ "modes": [
1547
+ "serio"
1548
+ ],
1549
+ "help": "Por dónde llegan las alertas críticas: PagerDuty, Opsgenie, Slack, email, etc.",
1550
+ "example": "PagerDuty + Slack #incidents",
1551
+ "number": 88
1552
+ },
1553
+ {
1554
+ "id": "observability.dashboards",
1555
+ "section": "Observabilidad",
1556
+ "text": "¿Dashboards públicos para stakeholders?",
1557
+ "type": "boolean",
1558
+ "required": true,
1559
+ "modes": [
1560
+ "serio"
1561
+ ],
1562
+ "help": "Si stakeholders no técnicos (negocio, ejecutivos) verán métricas operativas.",
1563
+ "example": "sí",
1564
+ "number": 89
1565
+ },
1566
+ {
1567
+ "id": "multi.languages",
1568
+ "section": "Multi-X (idioma, tenant, región)",
1569
+ "text": "Idiomas soportados (separados por coma)",
1570
+ "type": "array",
1571
+ "required": true,
1572
+ "modes": [
1573
+ "serio"
1574
+ ],
1575
+ "help": "Códigos ISO de idiomas que el producto debe soportar. Si solo uno, indica solo ese.",
1576
+ "example": "es, en, fr",
1577
+ "validation": {
1578
+ "min_items": 1,
1579
+ "max_items": 20,
1580
+ "separator": ","
1581
+ },
1582
+ "number": 90
1583
+ },
1584
+ {
1585
+ "id": "multi.tenant",
1586
+ "section": "Multi-X (idioma, tenant, región)",
1587
+ "text": "¿Multi-tenant?",
1588
+ "type": "select",
1589
+ "required": true,
1590
+ "modes": [
1591
+ "serio"
1592
+ ],
1593
+ "help": "Determina cómo se aíslan los datos de distintos clientes. Impacta arquitectura, despliegue y compliance.",
1594
+ "example": "single-DB shared (con tenant_id)",
1595
+ "options": [
1596
+ "no (single-tenant)",
1597
+ "single-DB shared (con tenant_id)",
1598
+ "single-DB per tenant",
1599
+ "multi-DB (DB por tenant)"
1600
+ ],
1601
+ "number": 91
1602
+ },
1603
+ {
1604
+ "id": "multi.regions",
1605
+ "section": "Multi-X (idioma, tenant, región)",
1606
+ "text": "¿Multi-región?",
1607
+ "type": "select",
1608
+ "required": true,
1609
+ "modes": [
1610
+ "serio"
1611
+ ],
1612
+ "help": "Si el sistema corre en una región o varias. Multi-región mejora latencia y resiliencia, pero complica replicación.",
1613
+ "example": "una sola región",
1614
+ "options": [
1615
+ "una sola región",
1616
+ "multi-región activo-pasivo",
1617
+ "multi-región activo-activo"
1618
+ ],
1619
+ "number": 92
1620
+ },
1621
+ {
1622
+ "id": "multi.i18n_strategy",
1623
+ "section": "Multi-X (idioma, tenant, región)",
1624
+ "text": "Estrategia de i18n",
1625
+ "type": "select",
1626
+ "required": true,
1627
+ "modes": [
1628
+ "serio"
1629
+ ],
1630
+ "help": "Cómo se almacenan y entregan las traducciones. Cada estrategia tiene tradeoffs en flujo de trabajo y rendimiento.",
1631
+ "example": "archivos JSON por idioma",
1632
+ "options": [
1633
+ "archivos JSON por idioma",
1634
+ "gettext / PO files",
1635
+ "base de datos",
1636
+ "servicio externo (Phrase, Lokalise)"
1637
+ ],
1638
+ "number": 93
829
1639
  }
830
1640
  ]
831
- }
1641
+ }