EF Core Entity Model Analysis¶
Fecha: 2026-03-09
Workspace analizado: C:\inetpub\wiki.kalmiazen.com
Estado de verificación: parcial
Alcance¶
Este repositorio no contiene el código fuente .cs de la plataforma ni el DbContext real. El análisis se reconstruyó a partir de documentación técnica y reportes internos presentes en la wiki.
Fuentes principales:
docs/nexus/desarrollo/CALMIA-NEXUS-DEVELOPER-GUIDE.mddocs/nexus/features/AUDITORIA-IMPLEMENTACION-WORKSPACE.mddocs/nexus/agentes/CALMIA-NEXUS-AGENT-SPECIFICATION.mddocs/nexus/features/IDEAS-CURSOR-AI.mddocs/nexus/features/AUDITORIA-PROBLEMAS-A-REVISAR.mdschema-analysis-temp.json
Limitación crítica¶
No fue posible escanear clases EF Core reales porque en este workspace no existen archivos .cs, .csproj o .sln. Por tanto:
- Lo marcado como
Verificadoproviene de snippets o tablas explícitas en la documentación. - Lo marcado como
Verificado por esquemaproviene deschema-analysis-temp.json, que refleja la base PostgreSQL actual. - Lo marcado como
Inferidoproviene de diagramas, descripciones o referencias indirectas. - La lista completa de
64+ DbSetsno puede reconstruirse con precisión desde este repo.
DbContext identificado¶
NexusDbContext¶
Verificado en docs/nexus/desarrollo/CALMIA-NEXUS-DEVELOPER-GUIDE.md.
DbSets documentados explícitamente:
OrganizationProjectUserDevSessionDevSessionMessageCopilotExecutionCopilotStepBacklogItemScheduledTaskExecutionAgentRemoteAgent
La documentación indica que existen 64+ DbSets, pero solo estos 12 aparecen de forma explícita.
DbSets adicionales corroborados indirectamente por el esquema actual:
UserMemoryDocumentContextLinkClickUpConfigProjectSecretCommunicationChannelCopilotBatchExecutionAgentSkillAgentTrigger
OnModelCreating documentado¶
Configuraciones Verificadas:
- Índice único en
Organization.Slug - Índice único en
Project.Slug - Índice compuesto en
BacklogItem(ProjectId, Status) - Índice compuesto en
DevSession(UserId, Status) - Índice compuesto en
Execution(ProjectId, Status) CopilotExecution.ArtifactsJsonmapeado comojsonbBacklogItem.MetadataJsonmapeado comojsonb- Relación
DevSession 1-N DevSessionMessageconCascade - Relación
CopilotExecution 1-N CopilotStepconCascade
Configuraciones Verificadas por esquema:
Organization.Idusagen_random_uuid()Organization.CreatedAtyUpdatedAttienen default SQLProject.Slugtiene índice únicoIX_Projects_SlugUser.Emailtiene unicidad físicaUsers_Email_keyAgentSkilltiene PK compuesta(AgentId, Skill)CopilotSteptiene unicidad por(ExecutionId, Order)ClickUpConfig.ProjectIdtiene unicidadUQ_ClickUpConfigs_ProjectIdProjectSecrettiene unicidad(ProjectId, Key)CopilotExecution.ArtifactsJsonyWarningsJsonsonjsonbRemoteAgent.CapabilitiesJsonyConfigJsonsonjsonbProject.TechStack,Project.Tags,ClickUpConfig.StatusMappingJson,User.WorkspaceStatesonjsonb
Configuraciones Inferidas pero no verificables en código:
- Mapeo
jsonbadicional paraProject.SentryConfigJson - Mapeos para
WarningsJson,CapabilitiesJson,SystemInfo - Configuración de claves compuestas para
AgentSkill - Configuración de tablas auxiliares como
DocumentContextLink,ProjectSecret,CommunicationChannel
Entidades verificadas con propiedades explícitas¶
Organization¶
Estado: Verificado
Propiedades:
Id : GuidSlug : stringuniqueName : stringDescription : string?LogoUrl : string?ThemeId : string?PrimaryColor : string?IsActive : boolCreatedAt : DateTimeUpdatedAt : DateTime?
Navegación:
Projects : List<Project>CommunicationChannels : List<CommunicationChannel>
Relaciones:
1-NconProjectVerificado por snippet y diagrama1-NconCommunicationChannelInferido
Project¶
Estado: Verificado
Propiedades:
Id : GuidSlug : stringuniqueName : stringDescription : string?RepoPath : string?Instructions : string?SentryConfigJson : string?EnableDocumentContextualization : boolMaxDocumentsPerRequest : intMinDocumentRelevance : double
Navegación:
Secrets : List<ProjectSecret>Tasks : List<ScheduledTask>Executions : List<Execution>BacklogItems : List<BacklogItem>
Relaciones:
1-NconScheduledTaskVerificado por snippet y diagrama1-NconExecutionVerificado por snippet y diagrama1-NconBacklogItemVerificado por snippet y diagrama1-NconProjectSecretInferido0..1-0..1conClickUpConfigInferido por diagrama1-NconDocumentContextLinkInferido por migración documentada
DevSession¶
Estado: Verificado
Propiedades:
Id : GuidName : stringDescription : string?ProjectId : Guid?AgentId : string?PluginId : string?RemoteAgentId : Guid?UserId : GuidOrganizationId : GuidBacklogItemId : Guid?Status : stringMessageCount : intTokensUsed : intSessionInstructions : string?InjectSessionInstructions : boolMaxHistoryMessages : intMaxHistoryTokens : intAutoSummarizeHistory : boolHistorySummary : string?HistorySummaryGeneratedAt : DateTime?HistorySummaryMessageCount : int?WorkStartedAt : DateTime?WorkEndedAt : DateTime?
Navegación:
Messages : List<DevSessionMessage>
Relaciones:
N-1conProjectInferido por FK propertyN-1conUserVerificado por diagrama e índiceN-1conOrganizationInferido por FK property0..1-NconBacklogItemVerificado por diagrama1-NconDevSessionMessageVerificado por Fluent API1-NconCopilotExecutionVerificado por diagrama y FK en CopilotExecution0..1-NconRemoteAgentInferido por FK property
CopilotExecution¶
Estado: Verificado, con inconsistencias
Propiedades explícitas del developer guide:
Id : GuidDevSessionId : GuidObjective : stringState : CopilotStateResult : CopilotResultTotalSteps : intCurrentStepIndex : intCompletedSteps : intFailedSteps : intAutoApprove : boolAutoContinue : boolPauseOnWarning : boolMaxIterations : intMaxRetries : intTimeoutMinutes : intStepTimeoutSeconds : intTotalIterations : intTotalTokensUsed : intTotalMessagesGenerated : intTotalDurationMs : long?BatchId : Guid?ArtifactsJson : string?WarningsJson : string?
Navegación:
Steps : List<CopilotStep>DevSession : DevSession?
Relaciones:
N-1conDevSessionVerificado por property1-NconCopilotStepVerificado por Fluent APIN-1conCopilotBatchExecutionInferido por diagrama
Inconsistencias documentales:
AUDITORIA-IMPLEMENTACION-WORKSPACE.mdmenciona ademásUserId,Plan,Config,Metricsy13 estados.- El developer guide solo muestra
DevSessionId, sinUserId, y enum con8estados visibles.
Conclusión: la entidad evolucionó y la wiki contiene al menos dos versiones del modelo.
Agent¶
Estado: Verificado
Propiedades:
Id : GuidSlug : stringName : stringDescription : string?Model : stringSystemPrompt : stringSource : stringIsActive : boolCreatedAt : DateTimeUpdatedAt : DateTime
Navegación:
Skills : ICollection<AgentSkill>Triggers : ICollection<AgentTrigger>PluginAgents : ICollection<PluginAgent>
Relaciones:
1-NconAgentSkillVerificado1-NconAgentTriggerVerificado1-NconPluginAgentInferido
AgentSkill¶
Estado: Verificado
Propiedades:
AgentId : GuidSkill : stringProficiency : intAgent : Agent
Relaciones:
N-1conAgent
Notas:
- La clave primaria no está mostrada.
Inferencia fuerte: probablemente clave compuestaAgentId + Skill.
AgentTrigger¶
Estado: Verificado
Propiedades:
Id : GuidAgentId : GuidTriggerType : stringPattern : stringPriority : intAgent : Agent
Relaciones:
N-1conAgent
RemoteAgent¶
Estado: Verificado
Propiedades:
Id : GuidName : stringApiKey : stringApiKeyHash : stringOrganizationId : GuidStatus : RemoteAgentStatusConnectionId : string?LastHeartbeat : DateTime?SystemInfo : string?AgentVersion : string?DefaultWorkingDirectory : string?CapabilitiesJson : string?TotalCommandsExecuted : intTotalErrors : intTotalTokensUsed : longCpuUsagePercent : int?MemoryUsagePercent : int?DiskUsagePercent : int?
Relaciones:
N-1conOrganizationInferido por FK property1-NconDevSessionInferido por FK property en DevSession
UserMemory¶
Estado: Verificado por esquema, pero inconsistente con documentación previa
Propiedades reales observadas en esquema:
Id : GuidUserId : GuidProjectId : Guid?Category : stringContent : stringSource : stringConfidence : intUseCount : intIsActive : boolCreatedAt : DateTimeLastUsedAt : DateTime?
Relaciones verificadas por esquema:
N-1conUserON DELETE CASCADEN-1conProjectON DELETE SET NULL
Índices verificados por esquema:
IX_UserMemories_UserIdIX_UserMemories_ProjectIdIX_UserMemories_UserId_CategoryIX_UserMemories_IsActiveparcial para activos
Conclusión:
- El esquema actual respalda la variante
Category/Content/Confidence/UseCount/IsActive. - La variante
Key/Value/ConfidenceScoreenIDEAS-CURSOR-AI.mdquedó desactualizada o nunca llegó a producción.
BacklogItem¶
Estado: Verificado por esquema
Propiedades verificadas por esquema:
Id : GuidExecutionId : Guid?ProjectIdpor índice compuestoTitle : stringDescription : string?ItemType : string?Priority : stringStatuspor índice compuestoMetadataJson : string?HoldedTaskId : string?FollowUpTaskId : Guid?CreatedAt : DateTimeUpdatedAt : DateTimeResolvedAt : DateTime?ConvertedToTaskId : Guid?ConvertedAt : DateTime?ConversionNotes : string?ProcedureId : string?ProcedureName : string?SuggestedProcedure : string?AIAnalysisId : Guid?ClickUpTaskId : string?ClickUpListId : string?ClickUpSyncedAt : DateTime?ClickUpUrl : string?SentryIssueId : string?SentryPermalink : string?AICategory : string?AISummary : string?EstimatedEffort : string?Source : string?
Relaciones:
N-1conProjectVerificado por esquema, ON DELETE SET NULLN-1conExecutionVerificado por esquema, ON DELETE SET NULL0..1-1conScheduledTaskvíaConvertedToTaskIdVerificado por esquema0..1-1conScheduledTaskvíaFollowUpTaskIdVerificado por esquema0..1-1conBacklogAIAnalysisvíaAIAnalysisIdVerificado por esquema0..1-NconDevSessionVerificado por diagrama e índice en DevSessions.BacklogItemId
Observación:
- El developer guide solo incluye stub
public class BacklogItem { }, pero el esquema actual permite reconstruir la forma física con bastante precisión.
Entidades adicionales inferidas o parcialmente documentadas¶
Estas entidades aparecen en diagramas, tablas de migración, servicios o navegación, pero sin definición completa en este repo:
UserDevSessionMessageScheduledTaskExecutionProjectSecretCommunicationChannelDocumentContextLinkPluginPluginAgentPluginSkillPluginCommandPluginProcedureClickUpConfigCopilotBatchExecutionWellnessRecordSystemMetrics
ScheduledTask¶
Estado: Verificado por esquema
Propiedades verificadas por esquema:
Id,Slug,Name,TaskType,ProcedureId,ProjectId,CronExpression,ManualPrompt,AgentIdEnabled,Description,CreatedAt,UpdatedAt,LastRun,NextRunSourceBacklogItemId,SourceExecutionId,PluginId,SelectedSkills,SuggestedByAIExecuteImmediately,OutputFormat,CommandId,UseOrchestratorSecrets,TimeoutMinutesRequiresApproval,IncludeStructuredFooter,FooterIncludeBacklogItems,FooterIncludeTasks,FooterIncludeNotificationsScheduledAtUtc,IsOneTimeExecution,Priority,PriorityOrderDelayMinutes,NotBeforeUtc,NotAfterUtc,MaxRetries,RetryDelayMinutes,CurrentRetryCountRetryStrategy,DependsOnTaskId,DependsOnStatus,WaitForDependency
Relaciones verificadas por esquema:
N-1conProjectON DELETE SET NULLN-1conAgentON DELETE SET NULL0..1-1conBacklogItemvíaSourceBacklogItemId0..1-1conExecutionvíaSourceExecutionId1-NconExecutionInferido por FK inversa Executions.TaskId
Índices verificados por esquema:
IX_ScheduledTask_SluguniqueIX_ScheduledTask_ProjectIdIX_ScheduledTask_AgentIdIX_ScheduledTask_PriorityIX_ScheduledTask_ProcedureIdIX_ScheduledTask_CommandIdIX_ScheduledTask_SourceBacklogItemIdIX_ScheduledTask_SourceExecutionId
Notas:
- La tabla física actual es
ScheduledTasken singular, mientras la documentación de EF usaDbSet<ScheduledTask> ScheduledTasks. AUDITORIA-PROBLEMAS-A-REVISAR.mdafirma73 propiedades, pero el esquema actual muestra45.
Execution¶
Estado: Verificado por esquema
Propiedades verificadas por esquema:
Id,TaskId,TaskName,ProcedureId,ProjectId,StartedAt,CompletedAtDurationMinutes,Status,Source,Success,ErrorMessage,OutputSummary,OutputFullHoldedTaskId,CreatedAt,HasStructuredOutput,StructuredOutputJson,ResultTypeMetricsJson,IssuesFound,IssuesResolved,BacklogItemsGenerated,TriggeredBy,TriggeredByUserPromptPayloadJson
Relaciones verificadas por esquema:
N-1conProjectDELETE behavior no extraído aquíN-1conScheduledTaskvíaTaskId1-NconBacklogItemvíaBacklogItems.ExecutionId
Índices verificados por esquema:
IX_Executions_ProjectIdIX_Executions_StatusIX_Executions_TaskIdIX_Executions_StartedAtIX_Executions_ResultTypeIX_Executions_TriggeredByIX_Executions_HasStructuredOutput
DocumentContextLink¶
Estado: Verificado por esquema, con divergencia de nombres
Campos verificados por esquema:
IdProjectIdKeywordsDocumentPathDescriptionRelevanceWeightMaxTokensCategoryIsActiveUsageCountLastUsedAtCreatedAtUpdatedAtLastDiscoveredAtFeedbackScore
Relación:
N-1conProject
Índices verificados por esquema:
IX_DocumentContextLinks_ProjectIdIX_DocumentContextLinks_CategoryIX_DocumentContextLinks_IsActiveparcialIX_DocumentContextLinks_FeedbackScorecompuesto parcial
Nota:
- La documentación previa usa
FilePathyRelevance; el esquema actual usaDocumentPathyRelevanceWeight.
Relaciones consolidadas¶
Relaciones Verificadas:
Organization 1-N ProjectProject 1-N BacklogItemProject 1-N ScheduledTaskProject 1-N ExecutionUser 1-N DevSessionDevSession 1-N DevSessionMessageDevSession 1-N CopilotExecutionCopilotExecution 1-N CopilotStepAgent 1-N AgentSkillAgent 1-N AgentTriggerUser 1-N UserMemoryProject 1-N DocumentContextLinkProject 1-N ProjectSecretProject 0..1-1 ClickUpConfigOrganization 1-N CommunicationChannelOrganization 1-N RemoteAgentExecution 1-N BacklogItemScheduledTask 1-N Execution
Relaciones Inferidas:
Organization 1-N UserOrganization 1-N DevSessionDevSession 0..1-N BacklogItemDevSession 0..1-N RemoteAgentPlugin 1-N PluginAgentPlugin 1-N PluginSkillPlugin 1-N PluginCommandPlugin 1-N PluginProcedure
Configuración de proveedor y runtime¶
Verificado en documentación:
- EF Core usa PostgreSQL
- Se usa
UseNpgsql(...) - La base tiene columnas
jsonb - Existe
NexusDbContextFactorypara design-time
No verificable en código:
- Estrategia de naming conventions
- Configuraciones globales de precision, enum mapping, converters
ApplyConfigurationsFromAssembly(...)- Split de configuraciones con
IEntityTypeConfiguration<T>
Hallazgos de revisión¶
Alta severidad¶
-
Falta el código fuente EF Core real en este repositorio. Impacto: no es posible completar un inventario confiable de entidades, claves, constraints, owned types, converters y
DbSets reales. -
La documentación del modelo está desalineada con el esquema PostgreSQL actual. Ejemplos:
CopilotExecutionaparece con dos versiones distintas.UserMemoryaparece con dos esquemas incompatibles, y el esquema respalda solo uno.DocumentContextLinkdocumentaFilePath/Relevance, pero la base usaDocumentPath/RelevanceWeight.ScheduledTaskaparece como conjunto plural en EF/documentación, pero la tabla física actual está en singular. Impacto: alto riesgo de generar documentación incorrecta o migraciones erróneas si se toma una sola fuente como verdad.
Media severidad¶
-
El
DbContextdocumentado expone64+ DbSets, pero solo 12 están visibles en snippets y el esquema real contiene bastantes más tablas relacionadas. Impacto: el mapa del dominio queda incompleto para cualquier análisis de integridad o dependencia. -
Varias entidades relevantes solo existen como nombres o diagramas. Ejemplos:
User,DevSessionMessage,CopilotBatchExecution,CommunicationChannel. Impacto: no se pueden validar nullability, cardinalidades exactas ni delete behaviors.
Baja severidad¶
- La documentación no muestra claves primarias/compuestas, restricciones de longitud, defaults SQL ni nombres de tablas. Impacto: limita diseño físico y revisión de performance, aunque no impide un mapa conceptual.
Tests que faltan¶
Dado el estado documental, faltan al menos estas verificaciones automatizadas en el código fuente real:
- Test que compare los
DbSetdelNexusDbContextcontra la documentación publicada. - Test de mapeo para
jsonbenCopilotExecution,BacklogItemy cualquier entidad con payload JSON. - Test de delete behavior para
DevSession -> DevSessionMessageyCopilotExecution -> CopilotStep. - Test de unicidad para
Organization.SlugyProject.Slug. - Test de índices compuestos para consultas frecuentes.
- Test de snapshot de migraciones para detectar drift entre documentación y modelo real.
Resumen ejecutivo¶
Se identificó un NexusDbContext documentado para PostgreSQL con al menos 12 DbSet explícitos y evidencia de 64+ conjuntos totales. Se pudieron reconstruir con buen nivel de confianza las entidades Organization, Project, DevSession, CopilotExecution, Agent, AgentSkill, AgentTrigger y RemoteAgent, y además el esquema actual permitió verificar físicamente UserMemory, BacklogItem, ScheduledTask, Execution y DocumentContextLink.
El resultado es útil como mapa documental del dominio, pero no como inventario definitivo de EF Core. Para completar el análisis de forma correcta hace falta el repositorio de la plataforma que contiene Shared.Admin/Entities/, Shared.Admin/Data/NexusDbContext.cs y las migraciones SQL reales.