Matriz de garantías
El kernel es la única puerta a la base de datos. Las garantías se hacen cumplir en el kernel, y esta matriz registra dónde.
Los componentes que hacen cumplir una fila se etiquetan Guarantee en el modelo C4 y aparecen con el sello ámbar en el diagrama de componentes (ver Convenciones de diagramas).
El estado puede ser enforced, partial o gap. Mientras una fila no esté verificada contra el código, queda en TODO.
Componentes con sello
La columna «Componente (C4)» sale del modelo: es el componente etiquetado Guarantee cuya perspectiva «Garantías» nombra esa fila. Es un mapeo del modelo, no una verificación: el estado sigue en TODO hasta cotejarlo con el código.
Matriz
| # | Garantía | Componente (C4) | Enforced by (componente / archivo) | Verified by (test) | Status |
|---|---|---|---|---|---|
| 1 | El dinero no se crea ni se destruye: sum(ledger) = 0 por unidad | CompositeTransactionService, CounterpartyValidator | TODO | ||
| 2 | Toda intención de transacción persiste, incluso las rechazadas | EventTraitsSpec.phase (BEFORE_COMMIT por defecto) y PersistOutboxStep: el evento primario se escribe en la transacción del handler | PrimaryEventAtomicityTest (OCT-49): ninguna intención APPROVED queda sin su fila de outbox | partial | |
| 3 | Las entradas del ledger son append-only | TODO | |||
| 4 | Las cuentas que no son SETTLEMENT nunca quedan en negativo | BalanceValidator | TODO | ||
| 5 | Una selección de shard inválida falla de forma explícita, nunca cae silenciosamente | ShardResolverImpl | TODO | ||
| 6 | Los montos son Long en todos lados; la evaluación de expresiones nunca trunca | TODO | |||
| 7 | Que falle la resolución de la serial key es un error, nunca un UUID aleatorio | ProfileSpecValidator | ProfileInterpreter.resolveSerialKey (transacciones) y EmitPrimaryEventStep (clave de serialización del evento primario) lanzan SERIAL_KEY_RESOLUTION_FAILED | ProfileInterpreterInputValidationTest, PrimaryEventKeyResolutionTest (OCT-50) | partial |
| 8 | Un limitRef desconocido es un error (fail-closed) | LimitValidator | TODO | ||
| 9 | Aislamiento de tenant en toda tabla de negocio | TODO | |||
| 10 | Las intenciones vencidas se revierten automáticamente | TODO |
Notas de las filas verificadas:
- Fila 2 (
partial): el test verifica que una intención aprobada no queda sin su evento cuando falla algo después del commit del handler. No verifica todavía que las intenciones rechazadas persistan. - Fila 7 (
partial): cubre la resolución de la serial key del perfil y la del evento primario. El test del intérprete cubre el caso deserialStrategyausente; no se recorrieron los demás caminos de fallo deresolveSerialKeyni los eventos emitidos conemit(payload)enExecutionRuntimeBusImpl, que siguen sin validar la clave.