# Schema LOG Log inmutable de mensajes del sistema TZZR. ## Tabla: log.messages Registra todos los mensajes entre usuarios y agentes IA. | Campo | Tipo | Descripción | |-------|------|-------------| | id | BIGSERIAL | Índice incremental | | hash | CHAR(64) | SHA256 único del mensaje | | session_hash | CHAR(64) | SHA256 de la sesión | | sender_type | ENUM | Tipo de emisor: user, agent, orchestrator, system, tool | | sender_id | CHAR(64) | Hash del emisor (referencia a players) | | receiver_type | ENUM | Tipo de receptor: user, agent, orchestrator, system, tool | | receiver_id | CHAR(64) | Hash del receptor (referencia a players) | | leader_id | CHAR(64) | Hash del coordinador en multiagente (nullable) | | role | TEXT | Rol del emisor en el contexto | | content | TEXT | Contenido del mensaje | | attachments | JSONB | Adjuntos (archivos, datos) | | prev_hash | CHAR(64) | Hash del mensaje anterior (cadena de integridad) | | context_hashes | CHAR(64)[] | Hashes de mensajes incluidos como contexto | | hashtags | CHAR(64)[] | Hashes de etiquetas asociadas | | created_at | TIMESTAMPTZ | Timestamp de creación | ## Inmutabilidad - **INSERT**: Permitido - **UPDATE**: Bloqueado por trigger - **DELETE**: Bloqueado por trigger ## Cadena de integridad Cada mensaje referencia al anterior via `prev_hash`: ``` msg1.hash = SHA256(msg1) msg2.prev_hash = msg1.hash msg2.hash = SHA256(msg2) msg3.prev_hash = msg2.hash ... ``` Primer mensaje de sesión: `prev_hash = NULL` ## Índices - `session_hash` - Buscar mensajes de una sesión - `sender_id` - Mensajes enviados por un actor - `receiver_id` - Mensajes recibidos por un actor - `prev_hash` - Seguir cadena de integridad - `created_at` - Ordenar cronológicamente - `hashtags` (GIN) - Buscar por etiquetas ## Relaciones externas - `sender_id` y `receiver_id` referencian hashes de `core.players` - `hashtags` referencian hashes de `core.hashtags`