Capítulo 10 Gestión de Versiones
Declaración de Única Fuente de Verdad (Single Source of Truth). La política de gestión de versiones de DTP está definida por el Capítulo 1 §1.7 «Gestión de Versiones y Compatibilidad» como la Única Fuente de Verdad. Este capítulo MUST NOT redefinir la política ya especificada en §1.7; este capítulo solo proporciona los mecanismos operativos de las reglas de §1.7 (vinculación con el formato de cable, payloads concretos de códigos de error, secuencia de negociación, plantilla de declaración de implementación) y el flujo de gobernanza (convenciones de directorio y estado, acciones de finalización). Siempre que cualquier declaración de este capítulo sea ambigua con §1.7, §1.7 MUST prevalecer.
10.1 Formato del Número de Versión (referencia operativa)
La semántica del número de versión del protocolo DTP, la estructura de dos niveles MAJOR.MINOR (sin PATCH), la regla de clasificación de cambios y las definiciones de ejes ortogonales están en §1.7.1 y §1.7.2 y no se repiten aquí.
Vinculación con el formato de cable: el header de cada LogicalFrame MUST llevar el campo ProtocolVersion completo (véase la Sección 4.4):
interface ProtocolVersion {
major: number; // entero no negativo
minor: number; // entero no negativo
}
La versión inicial del protocolo definida por esta especificación MUST ser { major: 1, minor: 0 } (es decir, dtp/1.0).
10.2 Matriz de Compatibilidad de Versiones (suplemento operativo a §1.7.3)
Las reglas normativas de compatibilidad y negociación están en §1.7.3. La siguiente tabla es su realización operativa a nivel de procesamiento de marcos y MUST leerse según §1.7.3; si es ambigua, prevalece §1.7.3.
| Versión del Marco Recibido | Manejo |
|---|---|
| Igual a la versión más alta del receptor | Procesar normalmente |
| Igual a la versión mayor anterior de la versión más alta del receptor (major - 1) | Manejo de compatibilidad (procesar según la especificación más antigua) |
| Mayor que la versión más alta del receptor | MUST devolver VERSION_INCOMPATIBLE (7001) |
| Versión mayor inferior a (versión más alta del receptor - 1) | MUST devolver VERSION_INCOMPATIBLE (7001) |
| Misma versión mayor, versión menor inferior | Procesar normalmente (compatible hacia atrás) |
| Misma versión mayor, versión menor superior | SHOULD procesar (ignorar campos opcionales no reconocidos) |
10.2.1 Tolerancia de Versión Menor (realización operativa de §1.7.3)
Cuando una implementación recibe un marco con la misma versión mayor pero una versión menor superior, MUST:
- Procesar los campos conocidos;
- SHOULD ignorar los campos opcionales desconocidos;
- MUST NOT rechazar el marco completo debido a campos opcionales desconocidos;
- MUST NOT lanzar un error.
10.3 Manejo de Incompatibilidad de Versiones (mecanismo operativo)
10.3.1 Manejo del Receptor
Cuando el receptor recibe un LogicalFrame cuya versión de protocolo es superior a la versión que soporta (y excede el rango de compatibilidad), MUST:
- No procesar el marco;
- Enviar el error
VERSION_INCOMPATIBLE(7001) al emisor; - Incluir su versión más alta soportada en el campo
detailsde la notificación de error:
{
errorCode: 7001,
errorMessage: "Protocol version higher than supported",
details: {
supportedMaxVersion: { major: 1, minor: 0 }
}
}
La semántica del código de error
7001se rige por la tabla de códigos de error del Capítulo 9 y por el schema; este capítulo no la redefine.
10.3.2 Manejo del Emisor
Tras recibir el error VERSION_INCOMPATIBLE, el emisor MAY elegir:
- Degradar a la versión soportada por el peer y reenviar el marco (SHOULD ser preferido, siempre que exista un
MAJORcomún; sin degradación a través deMAJOR, véase §1.7.3); - Notificar a la aplicación de capa superior la incompatibilidad de versiones, y MUST NOT reintentar automáticamente de forma indefinida.
Una implementación MUST NOT cerrar inmediatamente la Session tras recibir un error de incompatibilidad de versión, y SHOULD permitir la oportunidad de degradación.
10.3.3 Consistencia de versión dentro de la sesión y secuencia de negociación
Cuando se establece una Session DTP, ambas partes MUST negociar una versión de protocolo consistente (reglas de negociación en §1.7.3). Durante la sesión:
- La versión unificada MUST utilizarse durante toda la sesión;
- MUST NOT cambiar las versiones del protocolo a mitad de la sesión.
La negociación de versiones SHOULD seguir esta secuencia; el portador concreto (extensiones de CAP, el primer Request_Frame/Response_Frame, etc.) MAY ser elegido por la implementación, pero la negociación MUST completarse antes de que se envíe el primer marco de datos:
DTP_A DTP_B
| |
|-- Hello (supported_versions) --->|
| |
|<-- Hello_Ack (chosen_version) ---|
| |
| [both sides use chosen_version]|
10.4 Evolución del Protocolo y Gobernanza
Esta sección proporciona el flujo operativo de las reglas de gobernanza de §1.7. El formato del git tag, la enumeración de estados del documento y la definición de edición editorial referidos aquí MUST anclarse a §1.7; esta sección no los redefine.
10.4.1 Convenciones de directorio y estado (consistentes con Faying Protocol)
- El estado del documento es un marcador del front matter y MUST NOT codificarse en la ruta (véase §1.7.1).
- Bajo
specification/, MUST mantenerse exactamente un área de trabajo mutabledraft/(actualizada de forma continua). - Todos los directorios distintos de
draft/MUST nombrarse por fecha de publicación (p. ej.2025-10-25/), representando una edición publicada congelada; «no draft significa publicado». - Que una edición publicada sea actualmente
Final,DeprecateduObsoletese determina únicamente por el campostatusde sus archivos y MUST NOT inferirse del nombre del directorio. - Crear directorios nombrados por estado (p. ej.
final/) está PROHIBIDO —de lo contrario, deprecar una edición requeriría mover directorios y romper enlaces. - WHEN ocurre una transición de estado, únicamente el
statusdel front matter MUST modificarse, y los directorios MUST NOT moverse.
10.4.2 Versiones Borrador y Oficiales
- Borrador: los documentos residen en
docs/{lang}/specification/draft/, el schema enschema/draft/; los números de versión borrador MAY usar{ major: 0, minor: N }. DuranteDraftNO hay promesa de compatibilidad (véase §1.7.5), y los borradores MUST NOT utilizarse en producción. - Versión oficial: MUST haber pasado por una revisión completa y discusión pública y tener una instantánea de versión inmutable; los documentos residen en
docs/{lang}/specification/{YYYY-MM-DD}/, el schema enschema/{YYYY-MM-DD}/. La primera versión oficial es2025-10-25, correspondiente a la versión del protocolodtp/1.0. - Inmutabilidad de la instantánea de versión: una vez publicada una versión oficial MUST permanecer inmutable; las erratas de texto puro se portan mediante un nuevo directorio de fecha de publicación según §1.7.4 con los directorios existentes congelados, y el contenido de la especificación o el schema de una instantánea publicada MUST NOT reescribirse en el lugar.
10.4.3 Acciones Estándar de Finalización (Draft → Final)
WHEN se realiza la finalización, el Doc Governance Process MUST completar las siguientes acciones en orden:
- Usar
git mvpara migrar todos los archivos bajodraft/al directorio de fecha de publicación (nombres de archivo sin cambios) y vaciardraft/; - Por archivo, cambiar
statusdeDraftaFinal; - Congelar
datea la fecha de publicación oficial, bloqueareditorsa la lista de firmantes de finalización y mantenerversionsin cambios; - Escribir la cadena de historial
replaces(apuntando al directorio borrador y a su hash corto de commit de finalización) en el front matter del README; - Etiquetar
dtp-v<MAJOR.MINOR>-final, que MUST cubrir cuerpo + vectores de prueba + schema juntos; - Cuando estén implicados varios idiomas / archivos, MUST migrarse juntos en el mismo commit; la publicación unilateral está prohibida.
10.4.4 Obsolescencia y Eliminación
Una implementación SHOULD declarar obsoleta la funcionalidad a través del siguiente proceso:
- Marcar como obsoleta: marcar la funcionalidad como obsoleta en una versión
MINOR, pero MUST continuar soportándola; - Período de transición: al menos un ciclo completo de versión
MAJOR; - Eliminación: eliminar en la siguiente versión
MAJOR.
Una implementación MUST NOT eliminar funcionalidad obsoleta en una versión MINOR.
10.5 Declaración de Implementación
Una implementación de DTP MUST declarar en su documentación:
- La versión más alta del protocolo soportada;
- Todas las versiones mayores anteriores soportadas;
- Si se soporta la compatibilidad hacia adelante (manejo de marcos con versiones menores superiores);
- Las extensiones definidas por la implementación, si las hay.
Por ejemplo:
Declaración de Versión de la Implementación X de DTP:
- Versión más alta del protocolo soportada: 1.0
- Versiones anteriores compatibles: ninguna (primera versión oficial)
- Compatibilidad hacia adelante: soportada; ignora campos opcionales desconocidos
- Algoritmos de cifrado: AES-256-GCM, ChaCha20-Poly1305
- Adaptadores de transporte: BLE, WebSocket, TCP
