Navegación Bilingüe: English · Español (este documento) Fase Requerida: Fase 3 — Construcción Audiencia Principal: Arquitectos, Desarrolladores, Agentes IA
Términos estrictos compartidos entre el negocio y el área técnica dentro de este contexto:
- Implementation Cycle (Ciclo de Implementación): El contenedor transaccional de un esfuerzo de desarrollo temporal (equivalente a un Sprint o Milestone).
- Technical Story (Historia Técnica): Una unidad atómica de ejecución que toman los desarrolladores o Agentes AI. Se origina a partir de una Historia de Usuario, Contrato Técnico aprobado o checkpoint de iniciativa (en modo solo-iniciativa).
- Code Branch (Rama de Código): Referencia lógica a la rama física en el repositorio Git (ej. GitHub/GitLab).
- Peer Review: Compuerta formal de revisión de código, poblada asíncronamente vía webhooks (ej. un Pull Request).
- Construction Gate: Criterio formal o "Definition of Done" que asegura que todo el código tiene revisión y cobertura antes de permitir la transición a QA.
- Bloqueo de Refinamiento (RefinementLock): Bloqueo exclusivo adquirido durante sesiones de refinamiento del backlog para prevenir ediciones concurrentes. Se libera tras commit o 30min de inactividad. Aplicable solo en modo generar. En modo solo-iniciativa, no se necesita bloqueo de refinamiento — el ordenamiento de checkpoints se gestiona a nivel de iniciativa.
| Símbolo/Estereotipo | Significado |
|---|---|
<<Aggregate Root>> |
Entidad raíz transaccional. Gobierna la persistencia y consistencia de las entidades internas. |
<<Entity>> |
Objeto de dominio con identidad única, dependiente de su Aggregate Root. |
<<Value Object>> |
Objeto inmutable sin identidad propia. Representa una propiedad estructural. |
<<Shared Kernel Shell>> |
Módulo transversal externo al dominio, inyectado por infraestructura. |
*-- (Línea sólida) |
Composición. El elemento hijo no puede existir sin el padre. |
..> (Línea punteada) |
Dependencia. El elemento depende de interactúa con el otro componente para delegar acciones. |
Tip
Opciones de Visualización: Si los diagramas se ven pequeños en su visor Markdown actual, copie el bloque de código en el Mermaid Live Editor para habilitar zoom, paneo infinito y exportación en alta resolución (SVG/PNG).
classDiagram
class ImplementationCycle {
<<Aggregate Root>>
+UUID id
+UUID blueprintId
+String tenantId
+String name
+String sprintGoal
+Date startDate
+Date endDate
+Int totalCapacityHours
+Int completedPoints
+CycleStatus status
+List~UUID~ technicalStoryIds
+List~ExternalReference~ externalRefs
+startCycle(UUID umsUserId)
+freezeCode(UUID umsUserId)
+updateSchedule(Date start, Date end, UUID umsUserId)
+recalculateMetrics()
+closeCycle(ConstructionGate, UUID umsUserId)
}
class TechnicalStory {
<<Aggregate Root>>
+UUID id
+UUID cycleId
+UUID parentSourceId
+StoryStatus status
+UUID peerReviewId
+UUID developerId_umsUserId
+Int complexity
+Int estimatedHours
+Int loggedHours
+List~String~ labels
+List~ExternalReference~ externalRefs
+assignDeveloper(UUID umsUserId)
+logTime(Int hours, UUID umsUserId)
+updateProgress(UUID umsUserId)
+linkBranch(CodeBranch)
+submitForReview(UUID umsUserId)
+markAsDone(UUID umsUserId)
}
class CodeBranch {
<<Value Object>>
+String repositoryUrl
+String branchName
+String latestCommitHash
}
class PeerReview {
<<Aggregate Root>>
+UUID id
+UUID technicalStoryId
+String externalId
+ReviewStatus reviewStatus
+String pullRequestUrl
+String sourceBranch
+String targetBranch
+String ciPipelineStatus
+Boolean mergeConflict
+List~ExternalReference~ externalRefs
+updateCiStatus(String status)
+flagConflict()
+registerReviewDecision(ReviewerDecision)
}
class ReviewerDecision {
<<Value Object>>
+String reviewerId_umsUserId
+String comment
+Date approvedAt
}
class ExternalReference {
<<Value Object>>
+ExternalSystem system
+String externalId
+String url
+ReferenceType type
+String label
+Date linkedAt
+Map metadata
}
ImplementationCycle "1" --> "0..*" TechnicalStory : orquesta
TechnicalStory "1" *-- "0..1" CodeBranch : mapeado a
TechnicalStory "1" --> "0..1" PeerReview : referenciado por
PeerReview "1" *-- "0..*" ReviewerDecision : contiene
ImplementationCycle "1" *-- "0..*" ExternalReference : mapeado a
TechnicalStory "1" *-- "0..*" ExternalReference : mapeado a
PeerReview "1" *-- "0..*" ExternalReference : mapeado a
classDiagram
class RequirementChecklist {
<<Value Object>>
+List~RequirementItem~ items
+isReadyForApproval() Boolean
}
class RequirementItem {
<<Value Object>>
+String code
+Boolean isMandatory
+RequirementStatus status
}
class StateTransition {
<<Value Object>>
+CycleStatus fromState
+CycleStatus toState
+Date transitionDate
+String triggeredBy
}
class ConstructionGate {
<<Value Object>>
+String techLeadId
+GateDecision decision
+Date decidedAt
}
class AuditControl {
<<Value Object>>
+String createdBy
+Date createdAt
}
class RefinementLock {
<<Value Object>>
+UUID backlogId
+UUID acquiredBy_umsUserId
+Date acquiredAt
+Date expiresAt
+Boolean isReleased
+release()
+isExpired() Boolean
}
class ImplementationCycle {
<<Aggregate Root>>
}
class TechnicalStory {
<<Aggregate Root>>
}
ImplementationCycle "1" *-- "1" RequirementChecklist : verifica contra
RequirementChecklist "1" *-- "1..*" RequirementItem : contiene
ImplementationCycle "1" *-- "1" AuditControl : auditada por
ImplementationCycle "1" *-- "0..*" StateTransition : historial de estados
ImplementationCycle "1" *-- "0..1" ConstructionGate : gobernada por
TechnicalStory "1" *-- "1" AuditControl : auditada por
ImplementationCycle "1" *-- "0..1" RefinementLock : bloqueado por
Nota de Modo de RefinementLock: Aplicable solo en modo generar. En modo solo-iniciativa, no se necesita bloqueo de refinamiento — el ordenamiento de checkpoints se gestiona a nivel de iniciativa.
classDiagram
class WorkflowEngine {
<<Shared Kernel Shell>>
+validateTransition()
+evaluateApprovalGate()
}
class TenantConfigShell {
<<Shared Kernel Shell>>
+getTenantWorkflowRules()
}
class IntegrationFabric {
<<Shared Kernel Shell>>
+listenToGithubWebhooks()
+listenToGitlabWebhooks()
}
class UMS_SDK {
<<Cross-Cutting>>
+RequiresDomainAccess()
}
class PeerReview {
<<Aggregate Root>>
}
class ImplementationCycle {
<<Aggregate Root>>
}
ImplementationCycle ..> TenantConfigShell : lee reglas opcionales
ImplementationCycle ..> WorkflowEngine : delega lógica de estados
ImplementationCycle ..> UMS_SDK : asegurada vía
PeerReview ..> IntegrationFabric : hidratada asíncronamente vía
El módulo emplea el patrón de Agregados Pequeños (Small Aggregates) estipulado en las reglas corporativas Evolith (R-21) para maximizar el rendimiento y prevenir bloqueos:
ImplementationCycle: No contiene historias anidadas físicamente, sino una listaList<UUID> technicalStoryIds.TechnicalStory: Tarea aislada en la que un desarrollador o IA trabaja.PeerReview: Elevado a Aggregate Root independiente para que los webhooks externos de repositorios Git (vía IntegrationFabric) puedan impactar su estado asíncronamente sin bloquear transacciones pesadas en elImplementationCycleo laTechnicalStory.
RequirementChecklist: (Regla corporativa R-22). Valida flujos dinámicos inyectados por la configuración del Tenant de forma local al dominio.CodeBranch: Objeto inmutable que define explícitamente en qué repositorio y rama vive el trabajo.RefinementLock: Value Object para sesiones de refinamiento exclusivas del backlog (US-CON-012). Se adquiere al inicio de sesión, se libera tras commit o 30min de inactividad. Aplicable solo en modo generar. En modo solo-iniciativa, no se necesita bloqueo de refinamiento — el ordenamiento de checkpoints se gestiona a nivel de iniciativa.
A diferencia de fases anteriores, Construction depende enormemente del mundo real. El IntegrationFabric asume un rol protagónico, capturando webhooks de GitHub, GitLab o Bitbucket y traduciéndolos a comandos de dominio (ej. UpdatePeerReviewCommand) que hidratan los agregados locales de PeerReview.