ai-flow-dev 2.8.1 → 2.9.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.
@@ -255,8 +255,73 @@ STORY_POINTS=${STORY_POINTS:-0}
255
255
  DURATION_HOURS=$(( DURATION_MIN / 60 ))
256
256
  DURATION_MINS=$(( DURATION_MIN % 60 ))
257
257
 
258
- # 2. Build JSON analytics
259
- ANALYTICS_JSON="{\"task\":\"$TASK_FOLDER\",\"type\":\"$TASK_TYPE\",\"src\":\"$TASK_SOURCE\",\"dur\":$DURATION_MIN,\"start\":\"$CREATED_AT\",\"end\":\"$COMPLETED_AT\",\"tasks\":$TOTAL_TASKS,\"sp\":$STORY_POINTS,\"commits\":$COMMIT_COUNT,\"valid\":$VALIDATION_PASSED}"
258
+ # Extract new analytics fields (Phase 1)
259
+ # 1. User name
260
+ USER_NAME=$(git config user.name 2>/dev/null || echo "Unknown")
261
+
262
+ # 2. Task summary (first line after ## Objective in work.md)
263
+ if [ -f "$TASK_PATH/work.md" ]; then
264
+ SUMMARY=$(grep -A 1 "^## Objective" "$TASK_PATH/work.md" | tail -1 | sed 's/^[[:space:]]*//' | cut -c 1-80)
265
+ SUMMARY=${SUMMARY:-"No description"}
266
+ else
267
+ SUMMARY="No description"
268
+ fi
269
+
270
+ # 3. Complexity (COMPLEX if status.json exists, otherwise MEDIUM)
271
+ if [ -f "$TASK_PATH/status.json" ]; then
272
+ COMPLEXITY="COMPLEX"
273
+ else
274
+ COMPLEXITY="MEDIUM"
275
+ fi
276
+
277
+ # 4. Branch name
278
+ BRANCH_NAME=$(git branch --show-current 2>/dev/null || echo "unknown")
279
+
280
+ # 5. Tags (infer from changed files)
281
+ CHANGED_PATHS=$(git diff --name-only main..HEAD 2>/dev/null | head -10)
282
+ TAGS=()
283
+
284
+ if echo "$CHANGED_PATHS" | grep -qiE 'controller|route|endpoint|api'; then
285
+ TAGS+=("API")
286
+ fi
287
+ if echo "$CHANGED_PATHS" | grep -qiE 'service|module|core|backend'; then
288
+ TAGS+=("Backend")
289
+ fi
290
+ if echo "$CHANGED_PATHS" | grep -qiE 'component|page|view|frontend'; then
291
+ TAGS+=("Frontend")
292
+ fi
293
+ if echo "$CHANGED_PATHS" | grep -qiE 'test|spec'; then
294
+ TAGS+=("Testing")
295
+ fi
296
+ if echo "$CHANGED_PATHS" | grep -qiE 'database|migration|schema|model'; then
297
+ TAGS+=("Database")
298
+ fi
299
+
300
+ # Convert tags array to JSON
301
+ if [ ${#TAGS[@]} -eq 0 ]; then
302
+ TAGS_JSON="[]"
303
+ else
304
+ TAGS_JSON=$(printf '%s\n' "${TAGS[@]}" | jq -R . | jq -s .)
305
+ fi
306
+
307
+ # 2. Build JSON analytics using jq for proper structure
308
+ ANALYTICS_JSON=$(jq -n \
309
+ --arg task "$TASK_FOLDER" \
310
+ --arg type "$TASK_TYPE" \
311
+ --arg src "$TASK_SOURCE" \
312
+ --arg start "$CREATED_AT" \
313
+ --arg end "$COMPLETED_AT" \
314
+ --argjson dur "$DURATION_MIN" \
315
+ --argjson sp "$STORY_POINTS" \
316
+ --argjson tasks "$TOTAL_TASKS" \
317
+ --argjson commits "$COMMIT_COUNT" \
318
+ --argjson valid "$VALIDATION_PASSED" \
319
+ --arg user "$USER_NAME" \
320
+ --arg summary "$SUMMARY" \
321
+ --arg complexity "$COMPLEXITY" \
322
+ --arg branch "$BRANCH_NAME" \
323
+ --argjson tags "$TAGS_JSON" \
324
+ '{task, type, src, start, end, dur, sp, tasks, commits, valid, user, summary, complexity, branch, tags}')
260
325
 
261
326
  # 3. Append to analytics.jsonl
262
327
  mkdir -p .ai-flow/archive
@@ -591,9 +656,15 @@ function generate_commit_links() {
591
656
  fi
592
657
 
593
658
  if [ -n "$COMMIT_URL_PATTERN" ]; then
594
- COMMIT_HASHES_SUMMARY+="[${hash}](${COMMIT_URL_PATTERN}${hash})"
659
+ # Build markdown link in parts to avoid VSCode link detection
660
+ COMMIT_HASHES_SUMMARY+="["
661
+ COMMIT_HASHES_SUMMARY+="$hash"
662
+ COMMIT_HASHES_SUMMARY+="]("
663
+ COMMIT_HASHES_SUMMARY+="$COMMIT_URL_PATTERN"
664
+ COMMIT_HASHES_SUMMARY+="$hash"
665
+ COMMIT_HASHES_SUMMARY+=")"
595
666
  else
596
- COMMIT_HASHES_SUMMARY+="\`${hash}\`"
667
+ COMMIT_HASHES_SUMMARY+='`'"${hash}"'`'
597
668
  fi
598
669
  fi
599
670
  count=$((count + 1))
@@ -703,108 +774,378 @@ Read the structured summary from `/tmp/ai-context-summary.md` (400-600 words) an
703
774
  **AI Prompt:**
704
775
 
705
776
  ```markdown
706
- Genera dos descripciones profesionales (PR y Jira) basándote en este resumen estructurado:
777
+ Genera dos descripciones profesionales (PR y Jira) usando el TEMPLATE OFICIAL en `.ai-flow/templates/pr-description.template.md`.
707
778
 
708
779
  <context-summary>
709
780
  $(cat /tmp/ai-context-summary.md)
710
781
  </context-summary>
711
782
 
712
- <commit-links>
713
- Platform: $PLATFORM
714
- Base URL Pattern: $COMMIT_URL_PATTERN
715
- Commit Hashes Summary: $COMMIT_HASHES_SUMMARY
716
- </commit-links>
783
+ <template-variables>
784
+ ## Core Variables
785
+ TASK_TYPE=$TASK_TYPE
786
+ TASK_TITLE=[Extrae de WORK_OBJECTIVE]
787
+ BRANCH_NAME=$CURRENT_BRANCH
788
+ STORY_POINTS=$STORY_POINTS
789
+ DURATION=${DURATION_HOURS}h ${DURATION_MINS}min
790
+ IMPACT_AREA=$IMPACT_AREA
791
+ PLATFORM=$PLATFORM
792
+ COMMIT_HASHES_SUMMARY=$COMMIT_HASHES_SUMMARY
717
793
 
718
- <formatting-requirements>
719
- - Área de impacto detectada: $IMPACT_AREA
720
- - Mostrar deployment notes: $([ "$SHOW_DEPLOYMENT_NOTES" = "true" ] && echo "" || echo "NO")
721
- - Breaking changes: $([ "$HAS_BREAKING_CHANGES" = "true" ] && echo "SÍ (resaltar con ⚠️)" || echo "NO")
722
- - Branch: $CURRENT_BRANCH
723
- - Story Points: $STORY_POINTS SP
724
- - Duration: ${DURATION_HOURS}h ${DURATION_MINS}min
725
- </formatting-requirements>
726
-
727
- **Requisitos:**
728
-
729
- 1. **PR Description (GitHub/GitLab/Bitbucket):**
730
- - Título: ## ${TASK_TYPE^}: [nombre descriptivo basado en objective]
731
- - Header con branch, SP, duration
732
- - Sección "Área de Impacto" con valor: $IMPACT_AREA
733
- - Contexto: Resume el problema/necesidad en 2-3 líneas (extrae de objective)
734
- - Solución Implementada: Resume enfoque técnico en 2-3 líneas (infiere de commits)
735
- - Cambios principales: Lista 5-7 cambios significativos (analiza commit subjects)
736
- - Validación: Tabla con Tests, Coverage, Lint, Docs
737
- - Métricas: Tabla con Commits, Archivos, Breaking Changes
738
- - Deployment Notes: Solo SI $SHOW_DEPLOYMENT_NOTES=true, incluir requirements específicos
739
- - Referencias: Commits con links usando $COMMIT_HASHES_SUMMARY
740
- - Reviewer checklist
741
-
742
- 2. **Jira Description (Markdown estándar):**
743
- - Similar estructura pero más concisa
744
- - Enfoque en resultado de negocio
745
- - Métricas en tabla
746
- - Deployment notes si aplica
747
- - Referencias con commits
794
+ ## Change Type Detection (marca con 'x' el que aplique)
795
+
796
+ IS_FEATURE=$([ "$TASK_TYPE" = "feature" ] && echo "x" || echo " ")
797
+ IS_FIX=$([ "$TASK_TYPE" = "fix" ] && echo "x" || echo " ")
798
+ IS_REFACTOR=$([ "$TASK_TYPE" = "refactor" ] && echo "x" || echo " ")
799
+ IS_DOCS=$([ "$TASK_TYPE" = "docs" ] && echo "x" || echo " ")
800
+ IS_PERF=$([ "$TASK_TYPE" = "perf" ] && echo "x" || echo " ")
801
+ IS_TEST=$([ "$TASK_TYPE" = "test" ] && echo "x" || echo " ")
802
+
803
+ ## Context & Solution (genera desde context-summary)
804
+
805
+ CONTEXT=[Resume el problema/necesidad en 2-3 líneas del WORK_OBJECTIVE]
806
+ SOLUTION=[Resume el enfoque técnico en 2-3 líneas analizando COMMIT_SUBJECTS]
807
+ MAIN_CHANGES=[Lista 5-7 cambios como bullets, infiere de COMMIT_SUBJECTS]
808
+ TEST_STEPS=[Genera 3-5 pasos específicos para probar, infiere de WORK_TASKS y TASK_TYPE]
809
+
810
+ ## Validation Metrics
811
+
812
+ TESTS_PASSED=$TESTS_PASSED
813
+ TESTS_TOTAL=$TESTS_TOTAL
814
+ TESTS_NEW=$TESTS_NEW
815
+ COVERAGE=$COVERAGE
816
+ DOCS_STATUS=$([ -n "$(git diff --name-only main..HEAD | grep '\.md$')" ] && echo "✅ Actualizada" || echo "⚠️ Revisar")
817
+
818
+ ## Code Metrics
819
+
820
+ TOTAL_COMMITS=$TOTAL_COMMITS
821
+ FILES_COUNT=$FILES_COUNT
822
+ LINES_ADDED=$LINES_ADDED
823
+ LINES_DELETED=$LINES_DELETED
824
+
825
+ ## Breaking Changes
826
+
827
+ HAS_BREAKING_CHANGES=$HAS_BREAKING_CHANGES
828
+ BREAKING_CHANGES_STATUS=$([ "$HAS_BREAKING_CHANGES" = "true" ] && echo "⚠️ SÍ (ver abajo)" || echo "✅ No")
829
+ BREAKING_CHANGES_LIST=$([ "$HAS_BREAKING_CHANGES" = "true" ] && echo "$COMMIT_BREAKING" || echo "")
830
+ MIGRATION_GUIDE=$([ "$HAS_BREAKING_CHANGES" = "true" ] && echo "[TODO: Usuario debe completar guía de migración]" || echo "")
831
+
832
+ ## Deployment
833
+
834
+ SHOW_DEPLOYMENT_NOTES=$SHOW_DEPLOYMENT_NOTES
835
+ HAS_MIGRATIONS=$HAS_MIGRATIONS
836
+ MIGRATION_FILES=$MIGRATION_FILES
837
+ NEW_ENV_VARS=$NEW_ENV_VARS
838
+ HAS_NEW_DEPS=$HAS_NEW_DEPS
839
+ INSTALL_CMD=$INSTALL_CMD
840
+ NEW_DEPENDENCIES=[Lista las dependencias nuevas del diff de package.json/requirements.txt/etc]
841
+
842
+ ## Issues & Screenshots
843
+
844
+ RELATED_ISSUES=[Busca en commits patrones como "Closes #123", "Fixes #456", extráelos]
845
+ HAS_ISSUES=$([ -n "$RELATED_ISSUES" ] && echo "true" || echo "false")
846
+ HAS_UI_CHANGES=$(echo "$FILES_BY_CATEGORY" | grep -qi 'frontend' && echo "true" || echo "false")
847
+ SCREENSHOTS_SECTION=$([ "$HAS_UI_CHANGES" = "true" ] && echo "## 📸 Screenshots\n\n💡 **Recomendación:** Agrega screenshots mostrando los cambios visuales (antes/después)" || echo "")
848
+
849
+ ## Jira-Specific Variables (para comentario compacto)
850
+
851
+ BUSINESS_SUMMARY=[Genera 1-2 líneas describiendo el VALOR DE NEGOCIO entregado, no detalles técnicos. Perspectiva de usuario/stakeholder]
852
+
853
+ # PR Link construction (considera que el PR aún NO existe al ejecutar /flow-finish)
854
+
855
+ PR_LINK=[SIEMPRE usa este formato exacto: "🔗 PR: [PEGAR_LINK_AQUI]"]
856
+ PR_CREATION_COMMANDS=[Genera comandos específicos según $PLATFORM:
857
+
858
+ - GitHub: "gh pr create --title \"$TASK_TYPE: $TASK_FOLDER\" --body-file <(echo \"Ver PR description arriba\")"
859
+ - GitLab: "glab mr create --title \"$TASK_TYPE: $TASK_FOLDER\" --description \"Ver PR description arriba\""
860
+ - Bitbucket: "bb pr create --title \"$TASK_TYPE: $TASK_FOLDER\""
861
+ - Genérico: "Crear PR manualmente en: ${COMMIT_URL_PATTERN%/commit/\*}/pulls"]
862
+
863
+ DEPLOYMENT_STATUS=[Detecta: "✅ Disponible en dev" si es local, "⏳ Pendiente staging/prod" si no hay push, "🚀 En producción" si tag release]
864
+ DEPLOYMENT_NOTES_COMPACT=[Si SHOW_DEPLOYMENT_NOTES=true, versión ultra-compacta: "⚠️ Requiere: nuevas env vars + npm install" en 1 línea]
865
+ QA_NOTES=[SOLO si hay algo crítico que QA debe saber: breaking changes, configuración especial, comportamiento no obvio. Si no hay nada especial, omitir completamente]
866
+
867
+ # Screenshots (OBLIGATORIO para frontend - formato simple con espacio para adjuntar)
868
+
869
+ SCREENSHOTS*REMINDER="\n## 📸 Screenshots\n\n### Before\n[Adjuntar imagen]\n\n### After\n[Adjuntar imagen]\n\n_Incluir: diferentes estados (hover, active, disabled), responsive (mobile/tablet/desktop)*"
870
+
871
+ ## 2026 Standard Sections (Security, Performance, Observability)
872
+
873
+ SECURITY_IMPACT=[Analiza el código y evalúa:
874
+
875
+ - Si hay cambios en auth/permisos → "- ✅ Auth/permissions changes reviewed and validated"
876
+ - Si hay exposición de datos → "- ✅ Data exposure risk mitigated with validation"
877
+ - Si hay nuevas deps → "- ✅ Dependencies scanned (npm audit / snyk)"
878
+ - Si hay endpoints públicos → "- ✅ API rate limiting implemented"
879
+ - Si no hay riesgos → "- ✅ No security implications"
880
+ Formato: lista de checkboxes con lo que aplica]
881
+
882
+ PERFORMANCE_IMPACT=[Analiza si el cambio afecta performance:
883
+
884
+ - Si es feature/refactor con queries → "**Database:** Query optimized with indexes (+50% faster)\n**Load tested:** ✅ 1000 concurrent requests"
885
+ - Si es fix de performance → "**Before:** {{métrica}} ms\n**After:** {{métrica}} ms ({{%}} improvement)"
886
+ - Si es UI → "**Bundle size:** +5KB (minified+gzip)\n**Lighthouse:** Performance 95/100"
887
+ - Si no hay impacto significativo → "No significant performance impact expected."
888
+ Sé específico con métricas reales si están en work.md]
889
+
890
+ OBSERVABILITY=[Analiza qué logging/monitoring se agregó o debe considerarse:
891
+
892
+ - Si hay logs nuevos → "- ✅ Structured logging added for {{feature}}"
893
+ - Si hay métricas → "- ✅ Metrics: {{metric_names}}"
894
+ - Si debe agregar alerts → "- ⚠️ Consider adding alert for {{condition}}"
895
+ - Si no aplica → "- ℹ️ No observability changes ({{reason: refactor/docs/etc}})"
896
+ Enfócate en lo que REALMENTE se agregó o es necesario]
897
+
898
+ </template-variables>
899
+
900
+ <instructions>
901
+ **Lee el template en `.ai-flow/templates/pr-description.template.md`** y genera DOS descripciones siguiendo EXACTAMENTE esa estructura:
902
+
903
+ 1. **PR Description (GitHub/GitLab/Bitbucket) - TÉCNICO, COMPLETO:**
904
+ - Usa TODAS las secciones del template
905
+ - Renderiza variables con valores reales
906
+ - Audiencia: Desarrolladores y Reviewers
907
+ - Enfoque: "Cómo se implementó" (detalles técnicos)
908
+ - Incluye secciones condicionales SOLO si aplican:
909
+ - Breaking Changes Details (si HAS_BREAKING_CHANGES=true)
910
+ - Deployment Notes (si SHOW_DEPLOYMENT_NOTES=true)
911
+ - Screenshots (si HAS_UI_CHANGES=true)
912
+ - Genera TEST_STEPS específicos del contexto (no genéricos)
913
+
914
+ 2. **Jira Comment (Task Update) - BUSINESS-ORIENTED, COMPACTO:**
915
+ - Audiencia: QA, PM, Stakeholders + Devs
916
+ - Enfoque: "Qué se logró y cómo probarlo" (resultado de negocio)
917
+ - Máximo 20-25 líneas (escaneable en 30 segundos)
918
+ - BUSINESS_SUMMARY es lo MÁS IMPORTANTE: debe explicar el valor sin términos técnicos
919
+ - TEST_STEPS deben ser actionables para QA (no requieren conocimiento de código)
920
+ - SCREENSHOTS_REMINDER siempre presente para frontend (cambios visuales esperados)
921
+ - DEPLOYMENT_NOTES_COMPACT solo si es crítico (1 línea máximo)
922
+ - QA_NOTES solo si hay algo no obvio que QA debe saber
748
923
 
749
924
  **Reglas Importantes:**
750
925
 
751
- - Usa lenguaje profesional pero claro
752
- - Sé específico con cambios técnicos
926
+ - Usa lenguaje profesional pero claro (nivel senior engineer)
927
+ - Sé específico con cambios técnicos (usa nombres reales de archivos/módulos)
753
928
  - Usa los commit links ya formateados en $COMMIT_HASHES_SUMMARY
754
- - Escapa caracteres especiales para Markdown válido (backticks, pipes, asteriscos)
755
- - Usa separadores `---` (no `━━━━`)
756
- - Si breaking changes, resáltalos con ⚠️ en sección Métricas
757
- - Si deployment notes, específico con cada requirement
929
+ - Genera TEST_STEPS específicos del tipo de cambio (no pasos genéricos)
930
+ - Si MIGRATION_GUIDE está vacío y hay breaking changes, recomienda al usuario completarlo
931
+ - Escapa caracteres especiales correctamente para Markdown válido
932
+ - Usa separadores `---` (no `━━━━` o caracteres Unicode)
933
+ - Si NEW_DEPENDENCIES está vacío pero HAS_NEW_DEPS=true, detecta del diff
934
+
935
+ **Output Format:**
936
+
937
+ IMPORTANTE: Responde directamente con este formato EXACTO usando 5 BACKTICKS (máxima robustez):
938
+
939
+ ---
940
+
941
+ ## 📋 PULL REQUEST DESCRIPTION
942
+
943
+ \`\`\`\`\`markdown
944
+
945
+ ## {{TASK_TYPE}}: {{TASK_TITLE}}
946
+
947
+ > **Branch:** `{{BRANCH_NAME}}` • **Story Points:** {{STORY_POINTS}} SP • **Duration:** {{DURATION}}
948
+
949
+ ---
950
+
951
+ ## 🎯 Tipo de Cambio
952
+
953
+ - [{{IS_FEATURE}}] ✨ Feature (nueva funcionalidad)
954
+ - [{{IS_FIX}}] 🐛 Fix (corrección de bug)
955
+ - [{{IS_REFACTOR}}] ♻️ Refactor (sin cambio funcional)
956
+ - [{{IS_DOCS}}] 📝 Docs (solo documentación)
957
+ - [{{IS_PERF}}] ⚡ Performance (mejora)
958
+ - [{{IS_TEST}}] 🧪 Test (agregar/mejorar tests)
959
+
960
+ ## 🎯 Área de Impacto
961
+
962
+ **{{IMPACT_AREA}}**
963
+
964
+ ## 💡 Contexto
965
+
966
+ {{CONTEXT}}
967
+
968
+ {{RELATED_ISSUES}}
969
+
970
+ ## ✅ Solución Implementada
971
+
972
+ {{SOLUTION}}
973
+
974
+ ## 🔧 Cambios Principales
758
975
 
759
- **Output en formato (CRÍTICO - respetar delimitadores):**
976
+ {{MAIN_CHANGES}}
760
977
 
761
- \`\`\`markdown
978
+ ## 🧪 Cómo Probar
762
979
 
763
- <!-- PR_DESCRIPTION_START -->
980
+ {{TEST_STEPS}}
764
981
 
765
- [contenido completo de PR description aquí]
982
+ {{SCREENSHOTS_SECTION}}
766
983
 
767
- <!-- PR_DESCRIPTION_END -->
984
+ ## Security Impact
768
985
 
769
- <!-- JIRA_DESCRIPTION_START -->
986
+ {{SECURITY_IMPACT}}
770
987
 
771
- [contenido completo de Jira description aquí]
988
+ ## Performance Impact
772
989
 
773
- <!-- JIRA_DESCRIPTION_END -->
990
+ {{PERFORMANCE_IMPACT}}
774
991
 
775
- \`\`\`
992
+ ## 🔍 Observability
993
+
994
+ {{OBSERVABILITY}}
995
+
996
+ ## �📊 Validación
997
+
998
+ | Aspecto | Resultado |
999
+ |---------|-----------||
1000
+ | 🧪 Tests | {{TESTS_PASSED}}/{{TESTS_TOTAL}} passing (+{{TESTS_NEW}} nuevos) |
1001
+ | 📈 Coverage | {{COVERAGE}}% |
1002
+ | 🔍 Lint | ✅ Sin errores |
1003
+ | 📝 Docs | {{DOCS_STATUS}} |
1004
+
1005
+ ## 📈 Métricas
1006
+
1007
+ | Métrica | Valor |
1008
+ | ------------------- | ------------------------------------------------------------------------ |
1009
+ | 💾 Commits | {{TOTAL_COMMITS}} ([ver commits]({{COMMIT_HASHES_SUMMARY}})) |
1010
+ | 📁 Archivos | {{FILES_COUNT}} modificados (+{{LINES_ADDED}}/-{{LINES_DELETED}} líneas) |
1011
+ | ⚠️ Breaking Changes | {{BREAKING_CHANGES_STATUS}} |
1012
+ | ⏱️ Duración | {{DURATION}} ({{STORY_POINTS}} SP) |
1013
+
1014
+ {{BREAKING_CHANGES_DETAILS}}
1015
+
1016
+ {{DEPLOYMENT_NOTES}}
1017
+
1018
+ ## 📦 Dependencias
1019
+
1020
+ {{DEPENDENCIES_SECTION}}
1021
+
1022
+ ## 🔗 Referencias
1023
+
1024
+ - **Commits:** {{COMMIT_HASHES_SUMMARY}}
1025
+ - **Platform:** {{PLATFORM}}
1026
+ {{ISSUE_LINKS}}
1027
+
1028
+ ## ✅ Reviewer Checklist
1029
+
1030
+ - [ ] El código sigue los estándares del proyecto
1031
+ - [ ] La lógica es clara y está bien documentada
1032
+ - [ ] Los tests cubren casos críticos y edge cases
1033
+ - [ ] No hay riesgos de seguridad o performance
1034
+ - [ ] La documentación está actualizada
1035
+ - [ ] Los cambios no introducen breaking changes no documentados
1036
+ - [ ] El PR es del tamaño adecuado (no demasiado grande)
1037
+
1038
+ ---
1039
+
1040
+ **Generated by AI Flow**
1041
+ \`\`\`\`\`
1042
+
1043
+ ---
1044
+
1045
+ ## 🎫 JIRA COMMENT (Task Update)
1046
+
1047
+ \`\`\`\`\`markdown
1048
+ 🚀 {{TASK_TYPE^}}: {{TASK_TITLE}}
1049
+
1050
+ ---
1051
+
1052
+ ## 📝 Resumen Ejecutivo
1053
+
1054
+ {{BUSINESS_SUMMARY}}
1055
+
1056
+ ---
1057
+
1058
+ ## 🔧 Solución Técnica
1059
+
1060
+ {{SOLUTION}}
1061
+
1062
+ ---
1063
+
1064
+ ## 🧪 Cómo Probar (QA)
1065
+
1066
+ {{TEST_STEPS}}
1067
+
1068
+ {{SCREENSHOTS_REMINDER}}
1069
+
1070
+ ---
1071
+
1072
+ ## 📊 Evidencia Técnica
1073
+
1074
+ | Aspecto | Detalle |
1075
+ | --------------- | ------------------------------------------------------------------------ |
1076
+ | 🔗 Pull Request | {{PR_LINK}} |
1077
+ | 🌿 Branch | `{{BRANCH_NAME}}` |
1078
+ | ✅ Tests | {{TESTS_PASSED}}/{{TESTS_TOTAL}} passing (+{{TESTS_NEW}} nuevos) |
1079
+ | 📈 Coverage | {{COVERAGE}}% |
1080
+ | 💾 Commits | {{TOTAL_COMMITS}} commits |
1081
+ | 📁 Archivos | {{FILES_COUNT}} modificados (+{{LINES_ADDED}}/-{{LINES_DELETED}} líneas) |
1082
+
1083
+ ---
1084
+
1085
+ ## 📋 Métricas de Desarrollo
1086
+
1087
+ - **Story Points:** {{STORY_POINTS}} SP
1088
+ - **Tiempo real:** {{DURATION}}
1089
+ - **Estado:** {{DEPLOYMENT_STATUS}}
1090
+
1091
+ {{DEPLOYMENT_NOTES_COMPACT}}
1092
+
1093
+ {{QA_NOTES}}
1094
+
1095
+ ---
1096
+
1097
+ ## 🚀 Siguiente Paso (Crear PR)
1098
+
1099
+ {{PR_CREATION_COMMANDS}}
1100
+
1101
+ 💡 _Después de crear el PR, reemplaza `[PEGAR_LINK_AQUI]` con el link real._
1102
+
1103
+ ---
1104
+
1105
+ _Generado automáticamente por AI Flow • Platform: {{PLATFORM}}_
1106
+ \`\`\`\`\`
1107
+
1108
+ ---
1109
+
1110
+ **Listo para copiar y pegar** 📋
1111
+
1112
+ **Diferencias clave entre los dos formatos:**
1113
+
1114
+ | Aspecto | PR Description | Jira Comment |
1115
+ |---------|----------------|--------------||
1116
+ | **Audiencia** | Desarrolladores/Reviewers | QA, PM, Stakeholders |
1117
+ | **Propósito** | Code review técnico | Status update + QA handoff |
1118
+ | **Longitud** | 40-60 líneas (completo) | 20-25 líneas (compacto) |
1119
+ | **Enfoque** | "Cómo se implementó" | "Qué se logró" |
1120
+ | **Uso** | Pegar en GitHub/GitLab PR | Agregar como comentario en Jira |
1121
+
1122
+ **CRÍTICO PARA EVITAR CONFLICTOS:**
1123
+
1124
+ 1. Los encabezados "## 📋 PULL REQUEST DESCRIPTION" y "## 🎫 JIRA COMMENT" deben estar FUERA de los bloques de código
1125
+ 2. USA EXACTAMENTE 5 BACKTICKS (\`\`\`\`\`) para abrir/cerrar cada bloque
1126
+ 3. ¿Por qué 5? Cubre hasta 4 backticks internos (bloques anidados) sin conflictos
1127
+ 4. Renderiza TODAS las variables con valores reales del contexto
1128
+ 5. Secciones condicionales ({{BREAKING_CHANGES_DETAILS}}, {{DEPLOYMENT_NOTES}}, etc.) SOLO si aplican
1129
+ 6. BUSINESS_SUMMARY en Jira debe ser NO-TÉCNICO (lenguaje de negocio)
1130
+ 7. SCREENSHOTS_REMINDER siempre presente para frontend
776
1131
 
777
1132
  Analiza el contexto y genera las descripciones óptimas ahora.
778
1133
  ```
779
1134
 
780
- **After AI generates the descriptions, extract and save them:**
1135
+ **After AI generates the descriptions:**
781
1136
 
782
1137
  ```bash
783
- # Extract PR description
784
- sed -n '/<!-- PR_DESCRIPTION_START -->/,/<!-- PR_DESCRIPTION_END -->/p' /tmp/ai-output.md | \
785
- sed '1d;$d' > /tmp/pr-description.md
786
-
787
- # Extract Jira description
788
- sed -n '/<!-- JIRA_DESCRIPTION_START -->/,/<!-- JIRA_DESCRIPTION_END -->/p' /tmp/ai-output.md | \
789
- sed '1d;$d' > /tmp/jira-description.md
790
-
791
- # Display descriptions
1138
+ # La IA responde directamente en el chat con las descripciones
1139
+ # en formato markdown listo para copiar y pegar.
1140
+ # No requiere post-procesamiento ni archivos temporales.
792
1141
  echo ""
793
- echo "---"
794
- echo "📋 DESCRIPCIÓN PARA PULL REQUEST (GitHub/GitLab/Bitbucket)"
795
- echo "---"
1142
+ echo "✅ Descripciones generadas correctamente"
796
1143
  echo ""
797
- cat /tmp/pr-description.md
1144
+ echo "📋 Dos formatos disponibles arriba:"
1145
+ echo " 1️⃣ PR Description → Para GitHub/GitLab (completo, técnico)"
1146
+ echo " 2️⃣ Jira Comment → Para agregar en tarea de Jira (compacto, business-oriented)"
798
1147
  echo ""
799
- echo ""
800
- echo "---"
801
- echo "🎫 DESCRIPCIÓN PARA JIRA/CLICKUP/LINEAR (Markdown)"
802
- echo "---"
803
- echo ""
804
- cat /tmp/jira-description.md
805
- echo ""
806
- echo ""
807
- echo "💡 Copia las descripciones de arriba para tus tickets"
1148
+ echo "📋 Copia directamente el contenido de los bloques markdown."
808
1149
  echo ""
809
1150
  ```
810
1151
 
@@ -838,20 +1179,16 @@ if [[ "$CONFIRM_PUSH" =~ ^[Yy]$ ]]; then
838
1179
  echo "---"
839
1180
  echo ""
840
1181
  echo "📊 Trabajo completado y subido correctamente"
841
- echo "🌿 Branch: $CURRENT_BRANCH (pushed)"
842
- echo ""
843
- echo "💡 Siguiente paso: Crear Pull Request"
844
- echo ""
845
- echo " GitHub CLI:"
846
- echo " gh pr create --title \"$TASK_TYPE: $TASK_FOLDER\" --body-file /tmp/pr-description.md"
1182
+ echo "🌿 Branch: $CURRENT_BRANCH (pushed a origin)"
847
1183
  echo ""
848
- echo " GitLab CLI:"
849
- echo " glab mr create --title \"$TASK_TYPE: $TASK_FOLDER\" --description \"\$(cat /tmp/pr-description.md)\""
1184
+ echo "📋 Siguiente paso opcional: Crear Pull Request para revisión"
850
1185
  echo ""
851
- echo " Bitbucket CLI:"
852
- echo " bb pr create --title \"$TASK_TYPE: $TASK_FOLDER\" --description \"\$(cat /tmp/pr-description.md)\""
1186
+ echo " GitHub CLI: gh pr create --title \"$TASK_TYPE: $TASK_FOLDER\""
1187
+ echo " GitLab CLI: glab mr create --title \"$TASK_TYPE: $TASK_FOLDER\""
1188
+ echo " Bitbucket CLI: bb pr create --title \"$TASK_TYPE: $TASK_FOLDER\""
1189
+ echo " Web UI: Abre repositorio → 'New Pull Request'"
853
1190
  echo ""
854
- echo " O abre tu repositorio web y crea el PR manualmente"
1191
+ echo "💡 Si creaste el PR, copia el link y actualiza el comentario de Jira"
855
1192
  echo ""
856
1193
  else
857
1194
  echo ""
@@ -43,12 +43,14 @@ Parse OpenAPI backend specification and return structured analysis data that `fl
43
43
  2. Execute CRUD implementation with project-specific patterns
44
44
  3. Ensure type-safety between frontend and backend
45
45
 
46
- **⚠️ CRITICAL: Do NOT create separate analysis files**
46
+ **⚠️ CRITICAL: Do NOT create ANY files in this sub-prompt**
47
47
 
48
48
  - This sub-prompt ONLY returns a JSON object (`OpenAPIAnalysisResult`)
49
- - NO files like `.ai-flow/analysis/*.md` or `.ai-flow/work/[task]/analysis.md` should be created
50
- - The parent prompt (`flow-work`) handles all file creation (only `work.md` and `status.json`)
51
- - All analysis data is stored in memory and used to populate `work.md`
49
+ - NO files like `.ai-flow/analysis/*.md` should be created
50
+ - NO files like `.ai-flow/work/[task]/analysis.md` should be created
51
+ - NO files like `.ai-flow/work/[task]/work.md` should be created here
52
+ - ✅ The parent prompt (`flow-work`) will create `.ai-flow/work/[task]/work.md` and `status.json` in Phase 2
53
+ - All analysis data is returned as JSON and will be embedded into `work.md` by the parent prompt
52
54
 
53
55
  ---
54
56
 
@@ -492,10 +492,14 @@ await saveToCache(cacheFile, {
492
492
  projectType: 'frontend',
493
493
  });
494
494
 
495
- // ⚠️ IMPORTANT: Do NOT create separate analysis files
495
+ // ⚠️ IMPORTANT: Do NOT create SEPARATE ANALYSIS FILES
496
496
  // The analysis result is stored in memory (workflow_context.analysis)
497
- // and will be used to generate the comprehensive work.md file.
498
- // NO files like .ai-flow/analysis/*.md or .ai-flow/work/[task]/analysis.md
497
+ // and will be merged into work.md during Phase 2.
498
+ //
499
+ // ❌ DO NOT CREATE: .ai-flow/analysis/*.md or .ai-flow/work/[task]/analysis.md
500
+ // ✅ MUST CREATE (in Phase 2): .ai-flow/work/[task]/work.md and status.json
501
+ //
502
+ // The analysis data is included INSIDE work.md, not as a separate file.
499
503
  ```
500
504
 
501
505
  **IF `analysisResult.success === false`:**
@@ -890,7 +894,15 @@ Find similar features/patterns in codebase:
890
894
  - The `work.md` file should be comprehensive and self-contained
891
895
  - For COMPLEX tasks with API analysis, include all OpenAPI metadata directly in `work.md`
892
896
 
893
- **IF complexity == "MEDIUM":**
897
+ **📦 For API_MODULE mode specifically:**
898
+
899
+ - The analysis from `flow-work-api.md` sub-prompt is stored in `workflow_context.analysis`
900
+ - ✅ YOU MUST CREATE `.ai-flow/work/api-[module-name]/work.md` with all analysis data embedded
901
+ - ✅ YOU MUST CREATE `.ai-flow/work/api-[module-name]/status.json` (API modules are COMPLEX)
902
+ - Include OpenAPI endpoints, schemas, field specs, validation rules, and relationships in `work.md`
903
+ - Do NOT skip file creation just because you received pre-analyzed data
904
+
905
+ **IF complexity == "MEDIUM":\*\***
894
906
 
895
907
  - Create simplified `.ai-flow/work/[task-name]/work.md` (~15-20 lines)
896
908
  - Skip status.json