Sistema de códigos jerárquicos 2-niveles + asignación determinista post-IA

- hierarchy.ts: Spike (S) agregado, buildHierarchyPath genera [E01-F04] (2 niveles)
  Legacy [E05-F04-U01] preservado (regex opcional 3er segmento)
- hierarchy-generator.ts (nuevo): analyzeExisting() computa contadores por épica+tipo
  assignEpicCodes() asigna E{max+1} secuencial
  assignItemCodes() asigna {epic}-{tipo}{n+1} a cada HU dentro de su épica
- project-analyzer.ts: post-procesa épicas y HUs con generador de códigos
  saveEpicDrafts usa epicCode en metadata y título con [E01]
- prompts-db.ts: prompt FASE 2 instruye a la IA a no generar códigos
- workitems.ts: EnrichedEpic._epicCode, EnrichedUserStory._epicCode/_itemCode
- DashboardView: muestra códigos en drafts y tabla de épicas
This commit is contained in:
2026-05-29 18:13:17 -05:00
parent 9cf12b482f
commit 3035351e6f
6 changed files with 218 additions and 26 deletions
+6
View File
@@ -19,12 +19,15 @@ export interface EnrichedUserStory extends KappaUserStory {
_assignedName: string
_statusName: string
_assignedEmployeeId: number | null
_epicCode: string | null
_itemCode: string | null
}
export interface EnrichedEpic extends KappaEpicDevelopment {
_itemType: ItemType
_hierarchyPath: string | null
_cleanName: string
_epicCode: string | null
}
export const useWorkItemsStore = defineStore('workitems', () => {
@@ -61,6 +64,7 @@ export const useWorkItemsStore = defineStore('workitems', () => {
_itemType: h?.items[h.items.length - 1]?.type || 'E',
_hierarchyPath: h?.fullPath ?? null,
_cleanName: h ? stripHierarchy(title) : title,
_epicCode: h?.epicCode ?? null,
}
}
@@ -113,6 +117,8 @@ export const useWorkItemsStore = defineStore('workitems', () => {
_assignedName: assignedName,
_statusName: hu.status_name || resolveStatusName(hu.status),
_assignedEmployeeId: employeeId,
_epicCode: h?.epicCode ?? null,
_itemCode: h?.itemCode ?? null,
}
}