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.
- package/README.md +16 -14
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/prompts/backend/flow-build-phase-0.md +0 -2
- package/prompts/backend/flow-build-phase-8.md +140 -18
- package/prompts/backend/flow-check.md +73 -39
- package/prompts/backend/flow-finish.md +424 -89
- package/prompts/desktop/flow-build-phase-8.md +72 -3
- package/prompts/desktop/flow-finish.md +430 -89
- package/prompts/frontend/flow-build-phase-0.md +39 -5
- package/prompts/frontend/flow-build-phase-8.md +100 -17
- package/prompts/frontend/flow-finish.md +426 -89
- package/prompts/frontend/flow-work-api.md +6 -4
- package/prompts/frontend/flow-work.md +16 -4
- package/prompts/mobile/flow-build-phase-0.md +39 -5
- package/prompts/mobile/flow-build-phase-8.md +114 -14
- package/prompts/mobile/flow-finish.md +430 -89
- package/prompts/mobile/flow-work-api.md +6 -4
- package/prompts/mobile/flow-work.md +16 -4
- package/prompts/shared/flow-report.md +636 -0
- package/templates/pr-description.template.md +298 -0
|
@@ -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
|
-
#
|
|
259
|
-
|
|
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|screen|ui'; then
|
|
291
|
+
TAGS+=("UI")
|
|
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|storage'; then
|
|
297
|
+
TAGS+=("Data")
|
|
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
|
-
|
|
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+="
|
|
667
|
+
COMMIT_HASHES_SUMMARY+='`'"${hash}"'`'
|
|
597
668
|
fi
|
|
598
669
|
fi
|
|
599
670
|
count=$((count + 1))
|
|
@@ -703,108 +774,382 @@ 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)
|
|
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
|
-
<
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
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
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
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 + pod 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
|
+
PLATFORMS_TESTED=[Detecta del diff: "✅ iOS" si hay cambios en ios/, "✅ Android" si hay cambios en android/, ambos si hay en ambos. Formato: "✅ iOS 14+ | ✅ Android 8+"]
|
|
867
|
+
|
|
868
|
+
# Screenshots (OBLIGATORIO para mobile - formato simple con espacio para adjuntar ambas plataformas)
|
|
869
|
+
|
|
870
|
+
SCREENSHOTS*REMINDER="\n## 📸 Screenshots\n\n### iOS - Before\n[Adjuntar imagen]\n\n### iOS - After\n[Adjuntar imagen]\n\n### Android - Before\n[Adjuntar imagen]\n\n### Android - After\n[Adjuntar imagen]\n\n_Incluir: diferentes tamaños de pantalla, orientaciones (portrait/landscape) si aplica*"
|
|
871
|
+
|
|
872
|
+
## 2026 Standard Sections (Security, Performance, Observability)
|
|
873
|
+
|
|
874
|
+
SECURITY_IMPACT=[Analiza el código y evalúa:
|
|
875
|
+
|
|
876
|
+
- Si hay cambios en auth/permisos → "- ✅ Auth/permissions changes reviewed and validated"
|
|
877
|
+
- Si hay exposición de datos → "- ✅ Data exposure risk mitigated with validation"
|
|
878
|
+
- Si hay nuevas deps → "- ✅ Dependencies scanned (npm audit / snyk)"
|
|
879
|
+
- Si hay endpoints públicos → "- ✅ API rate limiting implemented"
|
|
880
|
+
- Si no hay riesgos → "- ✅ No security implications"
|
|
881
|
+
Formato: lista de checkboxes con lo que aplica]
|
|
882
|
+
|
|
883
|
+
PERFORMANCE_IMPACT=[Analiza si el cambio afecta performance:
|
|
884
|
+
|
|
885
|
+
- Si es feature/refactor con queries → "**Database:** Query optimized with indexes (+50% faster)\n**Load tested:** ✅ 1000 concurrent requests"
|
|
886
|
+
- Si es fix de performance → "**Before:** {{métrica}} ms\n**After:** {{métrica}} ms ({{%}} improvement)"
|
|
887
|
+
- Si es UI → "**Bundle size:** +5KB (minified+gzip)\n**Lighthouse:** Performance 95/100"
|
|
888
|
+
- Si no hay impacto significativo → "No significant performance impact expected."
|
|
889
|
+
Sé específico con métricas reales si están en work.md]
|
|
890
|
+
|
|
891
|
+
OBSERVABILITY=[Analiza qué logging/monitoring se agregó o debe considerarse:
|
|
892
|
+
|
|
893
|
+
- Si hay logs nuevos → "- ✅ Structured logging added for {{feature}}"
|
|
894
|
+
- Si hay métricas → "- ✅ Metrics: {{metric_names}}"
|
|
895
|
+
- Si debe agregar alerts → "- ⚠️ Consider adding alert for {{condition}}"
|
|
896
|
+
- Si no aplica → "- ℹ️ No observability changes ({{reason: refactor/docs/etc}})"
|
|
897
|
+
Enfócate en lo que REALMENTE se agregó o es necesario]
|
|
898
|
+
|
|
899
|
+
</template-variables>
|
|
900
|
+
|
|
901
|
+
<instructions>
|
|
902
|
+
**Lee el template en `.ai-flow/templates/pr-description.template.md`** y genera DOS descripciones siguiendo EXACTAMENTE esa estructura:
|
|
903
|
+
|
|
904
|
+
1. **PR Description (GitHub/GitLab/Bitbucket) - TÉCNICO, COMPLETO:**
|
|
905
|
+
- Usa TODAS las secciones del template
|
|
906
|
+
- Renderiza variables con valores reales
|
|
907
|
+
- Audiencia: Desarrolladores y Reviewers
|
|
908
|
+
- Enfoque: "Cómo se implementó" (detalles técnicos)
|
|
909
|
+
- Incluye secciones condicionales SOLO si aplican:
|
|
910
|
+
- Breaking Changes Details (si HAS_BREAKING_CHANGES=true)
|
|
911
|
+
- Deployment Notes (si SHOW_DEPLOYMENT_NOTES=true)
|
|
912
|
+
- Screenshots (si HAS_UI_CHANGES=true)
|
|
913
|
+
- Genera TEST_STEPS específicos del contexto (no genéricos)
|
|
914
|
+
|
|
915
|
+
2. **Jira Comment (Task Update) - BUSINESS-ORIENTED, COMPACTO:**
|
|
916
|
+
- Audiencia: QA, PM, Stakeholders + Devs
|
|
917
|
+
- Enfoque: "Qué se logró y cómo probarlo" (resultado de negocio)
|
|
918
|
+
- Máximo 20-25 líneas (escaneable en 30 segundos)
|
|
919
|
+
- BUSINESS_SUMMARY es lo MÁS IMPORTANTE: debe explicar el valor sin términos técnicos
|
|
920
|
+
- TEST_STEPS deben ser actionables para QA en dispositivos reales
|
|
921
|
+
- PLATFORMS_TESTED indica qué plataformas fueron probadas (iOS/Android)
|
|
922
|
+
- SCREENSHOTS_REMINDER crítico para mobile (debe incluir ambas plataformas)
|
|
923
|
+
- DEPLOYMENT_NOTES_COMPACT solo si es crítico (1 línea máximo)
|
|
924
|
+
- QA_NOTES solo si hay algo no obvio que QA debe saber
|
|
748
925
|
|
|
749
926
|
**Reglas Importantes:**
|
|
750
927
|
|
|
751
|
-
- Usa lenguaje profesional pero claro
|
|
752
|
-
- Sé específico con cambios técnicos
|
|
928
|
+
- Usa lenguaje profesional pero claro (nivel senior engineer)
|
|
929
|
+
- Sé específico con cambios técnicos (usa nombres reales de archivos/módulos)
|
|
753
930
|
- Usa los commit links ya formateados en $COMMIT_HASHES_SUMMARY
|
|
754
|
-
-
|
|
755
|
-
-
|
|
756
|
-
-
|
|
757
|
-
-
|
|
931
|
+
- Genera TEST_STEPS específicos del tipo de cambio (no pasos genéricos)
|
|
932
|
+
- Si MIGRATION_GUIDE está vacío y hay breaking changes, recomienda al usuario completarlo
|
|
933
|
+
- Escapa caracteres especiales correctamente para Markdown válido
|
|
934
|
+
- Usa separadores `---` (no `━━━━` o caracteres Unicode)
|
|
935
|
+
- Si NEW_DEPENDENCIES está vacío pero HAS_NEW_DEPS=true, detecta del diff
|
|
936
|
+
|
|
937
|
+
**Output Format:**
|
|
938
|
+
|
|
939
|
+
IMPORTANTE: Responde directamente con este formato EXACTO usando 5 BACKTICKS (máxima robustez):
|
|
940
|
+
|
|
941
|
+
---
|
|
942
|
+
|
|
943
|
+
## 📋 PULL REQUEST DESCRIPTION
|
|
944
|
+
|
|
945
|
+
\`\`\`\`\`markdown
|
|
946
|
+
|
|
947
|
+
## {{TASK_TYPE}}: {{TASK_TITLE}}
|
|
948
|
+
|
|
949
|
+
> **Branch:** `{{BRANCH_NAME}}` • **Story Points:** {{STORY_POINTS}} SP • **Duration:** {{DURATION}}
|
|
950
|
+
|
|
951
|
+
---
|
|
952
|
+
|
|
953
|
+
## 🎯 Tipo de Cambio
|
|
954
|
+
|
|
955
|
+
- [{{IS_FEATURE}}] ✨ Feature (nueva funcionalidad)
|
|
956
|
+
- [{{IS_FIX}}] 🐛 Fix (corrección de bug)
|
|
957
|
+
- [{{IS_REFACTOR}}] ♻️ Refactor (sin cambio funcional)
|
|
958
|
+
- [{{IS_DOCS}}] 📝 Docs (solo documentación)
|
|
959
|
+
- [{{IS_PERF}}] ⚡ Performance (mejora)
|
|
960
|
+
- [{{IS_TEST}}] 🧪 Test (agregar/mejorar tests)
|
|
961
|
+
|
|
962
|
+
## 🎯 Área de Impacto
|
|
963
|
+
|
|
964
|
+
**{{IMPACT_AREA}}**
|
|
965
|
+
|
|
966
|
+
## 💡 Contexto
|
|
967
|
+
|
|
968
|
+
{{CONTEXT}}
|
|
969
|
+
|
|
970
|
+
{{RELATED_ISSUES}}
|
|
971
|
+
|
|
972
|
+
## ✅ Solución Implementada
|
|
973
|
+
|
|
974
|
+
{{SOLUTION}}
|
|
975
|
+
|
|
976
|
+
## 🔧 Cambios Principales
|
|
977
|
+
|
|
978
|
+
{{MAIN_CHANGES}}
|
|
979
|
+
|
|
980
|
+
## 🧪 Cómo Probar
|
|
981
|
+
|
|
982
|
+
{{TEST_STEPS}}
|
|
983
|
+
|
|
984
|
+
{{SCREENSHOTS_SECTION}}
|
|
985
|
+
|
|
986
|
+
## � Security Impact
|
|
987
|
+
|
|
988
|
+
{{SECURITY_IMPACT}}
|
|
989
|
+
|
|
990
|
+
## ⚡ Performance Impact
|
|
991
|
+
|
|
992
|
+
{{PERFORMANCE_IMPACT}}
|
|
993
|
+
|
|
994
|
+
## 🔍 Observability
|
|
758
995
|
|
|
759
|
-
|
|
996
|
+
{{OBSERVABILITY}}
|
|
760
997
|
|
|
761
|
-
|
|
998
|
+
## �📊 Validación
|
|
762
999
|
|
|
763
|
-
|
|
1000
|
+
| Aspecto | Resultado |
|
|
1001
|
+
|---------|-----------||
|
|
1002
|
+
| 🧪 Tests | {{TESTS_PASSED}}/{{TESTS_TOTAL}} passing (+{{TESTS_NEW}} nuevos) |
|
|
1003
|
+
| 📈 Coverage | {{COVERAGE}}% |
|
|
1004
|
+
| 🔍 Lint | ✅ Sin errores |
|
|
1005
|
+
| 📝 Docs | {{DOCS_STATUS}} |
|
|
764
1006
|
|
|
765
|
-
|
|
1007
|
+
## 📈 Métricas
|
|
766
1008
|
|
|
767
|
-
|
|
1009
|
+
| Métrica | Valor |
|
|
1010
|
+
| ------------------- | ------------------------------------------------------------------------ |
|
|
1011
|
+
| 💾 Commits | {{TOTAL_COMMITS}} ([ver commits]({{COMMIT_HASHES_SUMMARY}})) |
|
|
1012
|
+
| 📁 Archivos | {{FILES_COUNT}} modificados (+{{LINES_ADDED}}/-{{LINES_DELETED}} líneas) |
|
|
1013
|
+
| ⚠️ Breaking Changes | {{BREAKING_CHANGES_STATUS}} |
|
|
1014
|
+
| ⏱️ Duración | {{DURATION}} ({{STORY_POINTS}} SP) |
|
|
768
1015
|
|
|
769
|
-
|
|
1016
|
+
{{BREAKING_CHANGES_DETAILS}}
|
|
770
1017
|
|
|
771
|
-
|
|
1018
|
+
{{DEPLOYMENT_NOTES}}
|
|
772
1019
|
|
|
773
|
-
|
|
1020
|
+
## 📦 Dependencias
|
|
774
1021
|
|
|
775
|
-
|
|
1022
|
+
{{DEPENDENCIES_SECTION}}
|
|
1023
|
+
|
|
1024
|
+
## 🔗 Referencias
|
|
1025
|
+
|
|
1026
|
+
- **Commits:** {{COMMIT_HASHES_SUMMARY}}
|
|
1027
|
+
- **Platform:** {{PLATFORM}}
|
|
1028
|
+
{{ISSUE_LINKS}}
|
|
1029
|
+
|
|
1030
|
+
## ✅ Reviewer Checklist
|
|
1031
|
+
|
|
1032
|
+
- [ ] El código sigue los estándares del proyecto
|
|
1033
|
+
- [ ] La lógica es clara y está bien documentada
|
|
1034
|
+
- [ ] Los tests cubren casos críticos y edge cases
|
|
1035
|
+
- [ ] No hay riesgos de seguridad o performance
|
|
1036
|
+
- [ ] La documentación está actualizada
|
|
1037
|
+
- [ ] Los cambios no introducen breaking changes no documentados
|
|
1038
|
+
- [ ] El PR es del tamaño adecuado (no demasiado grande)
|
|
1039
|
+
|
|
1040
|
+
---
|
|
1041
|
+
|
|
1042
|
+
**Generated by AI Flow**
|
|
1043
|
+
\`\`\`\`\`
|
|
1044
|
+
|
|
1045
|
+
---
|
|
1046
|
+
|
|
1047
|
+
## 🎫 JIRA COMMENT (Task Update)
|
|
1048
|
+
|
|
1049
|
+
\`\`\`\`\`markdown
|
|
1050
|
+
🚀 {{TASK_TYPE^}}: {{TASK_TITLE}}
|
|
1051
|
+
|
|
1052
|
+
---
|
|
1053
|
+
|
|
1054
|
+
## 📝 Resumen Ejecutivo
|
|
1055
|
+
|
|
1056
|
+
{{BUSINESS_SUMMARY}}
|
|
1057
|
+
|
|
1058
|
+
---
|
|
1059
|
+
|
|
1060
|
+
## 🔧 Solución Técnica
|
|
1061
|
+
|
|
1062
|
+
{{SOLUTION}}
|
|
1063
|
+
|
|
1064
|
+
---
|
|
1065
|
+
|
|
1066
|
+
## 🧪 Cómo Probar (QA)
|
|
1067
|
+
|
|
1068
|
+
{{TEST_STEPS}}
|
|
1069
|
+
|
|
1070
|
+
{{SCREENSHOTS_REMINDER}}
|
|
1071
|
+
|
|
1072
|
+
---
|
|
1073
|
+
|
|
1074
|
+
## 📊 Evidencia Técnica
|
|
1075
|
+
|
|
1076
|
+
| Aspecto | Detalle |
|
|
1077
|
+
| --------------- | ------------------------------------------------------------------------ |
|
|
1078
|
+
| 🔗 Pull Request | {{PR_LINK}} |
|
|
1079
|
+
| 🌿 Branch | `{{BRANCH_NAME}}` |
|
|
1080
|
+
| ✅ Tests | {{TESTS_PASSED}}/{{TESTS_TOTAL}} passing (+{{TESTS_NEW}} nuevos) |
|
|
1081
|
+
| 📈 Coverage | {{COVERAGE}}% |
|
|
1082
|
+
| 💾 Commits | {{TOTAL_COMMITS}} commits |
|
|
1083
|
+
| 📁 Archivos | {{FILES_COUNT}} modificados (+{{LINES_ADDED}}/-{{LINES_DELETED}} líneas) |
|
|
1084
|
+
| 📱 Plataformas | {{PLATFORMS_TESTED}} |
|
|
1085
|
+
|
|
1086
|
+
---
|
|
1087
|
+
|
|
1088
|
+
## 📋 Métricas de Desarrollo
|
|
1089
|
+
|
|
1090
|
+
- **Story Points:** {{STORY_POINTS}} SP
|
|
1091
|
+
- **Tiempo real:** {{DURATION}}
|
|
1092
|
+
- **Estado:** {{DEPLOYMENT_STATUS}}
|
|
1093
|
+
|
|
1094
|
+
{{DEPLOYMENT_NOTES_COMPACT}}
|
|
1095
|
+
|
|
1096
|
+
{{QA_NOTES}}
|
|
1097
|
+
|
|
1098
|
+
---
|
|
1099
|
+
|
|
1100
|
+
## 🚀 Siguiente Paso (Crear PR)
|
|
1101
|
+
|
|
1102
|
+
{{PR_CREATION_COMMANDS}}
|
|
1103
|
+
|
|
1104
|
+
💡 _Después de crear el PR, reemplaza `[PEGAR_LINK_AQUI]` con el link real._
|
|
1105
|
+
|
|
1106
|
+
---
|
|
1107
|
+
|
|
1108
|
+
_Generado automáticamente por AI Flow • Platform: {{PLATFORM}}_
|
|
1109
|
+
\`\`\`\`\`
|
|
1110
|
+
|
|
1111
|
+
---
|
|
1112
|
+
|
|
1113
|
+
**Listo para copiar y pegar** 📋
|
|
1114
|
+
|
|
1115
|
+
**Diferencias clave entre los dos formatos:**
|
|
1116
|
+
|
|
1117
|
+
| Aspecto | PR Description | Jira Comment |
|
|
1118
|
+
|---------|----------------|--------------||
|
|
1119
|
+
| **Audiencia** | Desarrolladores/Reviewers | QA, PM, Stakeholders |
|
|
1120
|
+
| **Propósito** | Code review técnico | Status update + QA handoff |
|
|
1121
|
+
| **Longitud** | 40-60 líneas (completo) | 20-25 líneas (compacto) |
|
|
1122
|
+
| **Enfoque** | "Cómo se implementó" | "Qué se logró" |
|
|
1123
|
+
| **Uso** | Pegar en GitHub/GitLab PR | Agregar como comentario en Jira |
|
|
1124
|
+
|
|
1125
|
+
**CRÍTICO PARA EVITAR CONFLICTOS:**
|
|
1126
|
+
|
|
1127
|
+
1. Los encabezados "## 📋 PULL REQUEST DESCRIPTION" y "## 🎫 JIRA COMMENT" deben estar FUERA de los bloques de código
|
|
1128
|
+
2. USA EXACTAMENTE 5 BACKTICKS (\`\`\`\`\`) para abrir/cerrar cada bloque
|
|
1129
|
+
3. ¿Por qué 5? Cubre hasta 4 backticks internos (bloques anidados) sin conflictos
|
|
1130
|
+
4. Renderiza TODAS las variables con valores reales del contexto
|
|
1131
|
+
5. Secciones condicionales ({{BREAKING_CHANGES_DETAILS}}, {{DEPLOYMENT_NOTES}}, etc.) SOLO si aplican
|
|
1132
|
+
6. BUSINESS_SUMMARY en Jira debe ser NO-TÉCNICO (lenguaje de negocio)
|
|
1133
|
+
7. PLATFORMS_TESTED indica iOS/Android probados
|
|
1134
|
+
8. SCREENSHOTS_REMINDER crítico para mobile (ambas plataformas)
|
|
776
1135
|
|
|
777
1136
|
Analiza el contexto y genera las descripciones óptimas ahora.
|
|
778
1137
|
```
|
|
779
1138
|
|
|
780
|
-
**After AI generates the descriptions
|
|
1139
|
+
**After AI generates the descriptions:**
|
|
781
1140
|
|
|
782
1141
|
```bash
|
|
783
|
-
#
|
|
784
|
-
|
|
785
|
-
|
|
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
|
|
1142
|
+
# La IA responde directamente en el chat con las descripciones
|
|
1143
|
+
# en formato markdown listo para copiar y pegar.
|
|
1144
|
+
# No requiere post-procesamiento ni archivos temporales.
|
|
792
1145
|
echo ""
|
|
793
|
-
echo "
|
|
794
|
-
echo "📋 DESCRIPCIÓN PARA PULL REQUEST (GitHub/GitLab/Bitbucket)"
|
|
795
|
-
echo "---"
|
|
1146
|
+
echo "✅ Descripciones generadas correctamente"
|
|
796
1147
|
echo ""
|
|
797
|
-
|
|
1148
|
+
echo "📋 Dos formatos disponibles arriba:"
|
|
1149
|
+
echo " 1️⃣ PR Description → Para GitHub/GitLab (completo, técnico)"
|
|
1150
|
+
echo " 2️⃣ Jira Comment → Para agregar en tarea de Jira (compacto, business-oriented)"
|
|
798
1151
|
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"
|
|
1152
|
+
echo "📋 Copia directamente el contenido de los bloques markdown."
|
|
808
1153
|
echo ""
|
|
809
1154
|
```
|
|
810
1155
|
|
|
@@ -838,20 +1183,16 @@ if [[ "$CONFIRM_PUSH" =~ ^[Yy]$ ]]; then
|
|
|
838
1183
|
echo "---"
|
|
839
1184
|
echo ""
|
|
840
1185
|
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"
|
|
1186
|
+
echo "🌿 Branch: $CURRENT_BRANCH (pushed a origin)"
|
|
847
1187
|
echo ""
|
|
848
|
-
echo "
|
|
849
|
-
echo " glab mr create --title \"$TASK_TYPE: $TASK_FOLDER\" --description \"\$(cat /tmp/pr-description.md)\""
|
|
1188
|
+
echo "📋 Siguiente paso opcional: Crear Pull Request para revisión"
|
|
850
1189
|
echo ""
|
|
851
|
-
echo "
|
|
852
|
-
echo "
|
|
1190
|
+
echo " GitHub CLI: gh pr create --title \"$TASK_TYPE: $TASK_FOLDER\""
|
|
1191
|
+
echo " GitLab CLI: glab mr create --title \"$TASK_TYPE: $TASK_FOLDER\""
|
|
1192
|
+
echo " Bitbucket CLI: bb pr create --title \"$TASK_TYPE: $TASK_FOLDER\""
|
|
1193
|
+
echo " Web UI: Abre repositorio → 'New Pull Request'"
|
|
853
1194
|
echo ""
|
|
854
|
-
echo "
|
|
1195
|
+
echo "💡 Si creaste el PR, copia el link y actualiza el comentario de Jira"
|
|
855
1196
|
echo ""
|
|
856
1197
|
else
|
|
857
1198
|
echo ""
|
|
@@ -43,12 +43,14 @@ Parse OpenAPI backend specification and return structured analysis data that `fl
|
|
|
43
43
|
2. Execute CRUD implementation with mobile-specific patterns (React Native)
|
|
44
44
|
3. Ensure type-safety between mobile app and backend
|
|
45
45
|
|
|
46
|
-
**⚠️ CRITICAL: Do NOT create
|
|
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`
|
|
50
|
-
-
|
|
51
|
-
-
|
|
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: 'mobile',
|
|
493
493
|
});
|
|
494
494
|
|
|
495
|
-
// ⚠️ IMPORTANT: Do NOT create
|
|
495
|
+
// ⚠️ IMPORTANT: Do NOT create SEPARATE ANALYSIS FILES
|
|
496
496
|
// The analysis result is stored in memory (workflow_context.analysis)
|
|
497
|
-
// and will be
|
|
498
|
-
//
|
|
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`:**
|
|
@@ -887,7 +891,15 @@ Find similar features/patterns in codebase:
|
|
|
887
891
|
- The `work.md` file should be comprehensive and self-contained
|
|
888
892
|
- For COMPLEX tasks with API analysis, include all OpenAPI metadata directly in `work.md`
|
|
889
893
|
|
|
890
|
-
|
|
894
|
+
**📦 For API_MODULE mode specifically:**
|
|
895
|
+
|
|
896
|
+
- The analysis from `flow-work-api.md` sub-prompt is stored in `workflow_context.analysis`
|
|
897
|
+
- ✅ YOU MUST CREATE `.ai-flow/work/api-[module-name]/work.md` with all analysis data embedded
|
|
898
|
+
- ✅ YOU MUST CREATE `.ai-flow/work/api-[module-name]/status.json` (API modules are COMPLEX)
|
|
899
|
+
- Include OpenAPI endpoints, schemas, field specs, validation rules, and relationships in `work.md`
|
|
900
|
+
- Do NOT skip file creation just because you received pre-analyzed data
|
|
901
|
+
|
|
902
|
+
**IF complexity == "MEDIUM":**\*\*\*\*
|
|
891
903
|
|
|
892
904
|
- Create simplified `.ai-flow/work/[task-name]/work.md` (~15-20 lines)
|
|
893
905
|
- Skip status.json
|