Convoca v3.0 — Marco de versión estable
Fecha: 2026-08-07
Estado: APROBADO para implementación
Precedente: G1 validación automatizada ✅ · G2 tests (en curso) · G3 calidad ✅ · G4 hardening ✅
1. Congelación de API pública (API Freeze)
A partir de v2.7.0 y hasta v3.0.0, la API pública queda congelada:
no se añaden ni eliminan elementos sin aprobación explícita y bump de versión menor.
API pública congelada
| Categoría |
Elementos |
Namespace/patrón |
| REST |
6 namespaces, ~62 endpoints |
convoca/v1, convoca-members/v1, convoca-enroll/v1, convoca-gateway/v1, convoca-shifts/v1, convoca-publisher/v1 |
| Shortcodes |
26 públicos |
[convoca_*] (ver inventario) |
| Hooks (actions/filters) |
~150 |
convoca_* (ver HOOKS.md por plugin) |
| CPTs |
11 |
miembro, actividad, inscripcion, pago, centro_turno, convoca_documento, convoca_evaluacion, convoca_faq, convoca_kb |
| Taxonomías |
5 |
tipo_miembro, convoca_shifts_actividad, convoca_faq_cat, convoca_kb_cat |
| Metadatos |
~150 keys |
_convoca_* (prefijo fijo) |
| Opciones |
~40 |
convoca_*_settings, convoca_*_option |
| Bloques Gutenberg |
8 |
convoca-enroll/*, convoca-gateway/* |
| WP-CLI |
2 comandos |
wp conv migrate, wp conv webhooks |
Reglas del freeze
- Un elemento de la API congelada no se elimina ni renombra sin:
- Deprecación explícita (2 versiones menores de aviso)
- Migración automática si hay datos afectados
- Las adiciones son libres (no rompen nada existente)
- Los cambios de comportamiento de endpoints REST requieren bump mayor
2. Política de deprecaciones
Ciclo de vida de un elemento público
ACTIVO → DEPRECADO (vX) → OBSOLETO (vX+1) → ELIMINADO (vX+2 o v3.0)
| Estado |
Regla |
| Activo |
Documentado en la wiki, cubierto por health check |
| Deprecado |
Añadir _deprecated_function/_deprecated_hook/_deprecated_argument + log + mención en CHANGELOG |
| Obsoleto |
Sigue funcionando (compat), warning en logs, sin documentación nueva |
| Eliminado |
Solo en bump mayor (v3.0+), con migración automática si aplica |
Ejemplo de deprecación (hook)
// Antes: convoca_members_estado_changed (solo 2 args)
// Ahora: convoca_members_state_changed (3 args, nombre normalizado)
if ( has_action( 'convoca_members_estado_changed' ) ) {
do_action_deprecated( 'convoca_members_estado_changed', array( $id, $to ), '2.7.0', 'convoca_members_state_changed' );
}
do_action( 'convoca_members_state_changed', $id, $to, $from );
3. Versionado semántico (SemVer estricto)
MAJOR.MINOR.PATCH — ej: 3.0.0, 2.7.1
| Bump |
Cuándo |
Ejemplo |
| MAJOR |
API incompatible, eliminar deprecados, migraciones de BD |
2.x → 3.0.0 |
| MINOR |
Añadir funcionalidad compatible (API congelada: solo adiciones) |
2.7 → 2.8 |
| PATCH |
Bugs, seguridad, rendimiento (sin cambios de API) |
2.7.0 → 2.7.1 |
Reglas de sincronización (ya en vigor)
- Header del plugin = constante = Stable tag = CHANGELOG = wiki
- Verificado por health check (check de versión)
- Todos los plugins del ecosistema comparten el bump cuando hay cambio de integración
4. Roadmap v3.0
Bloqueante (previo al freeze definitivo)
v3.0.0
Post-v3.0 (3.1+)
5. Migraciones automáticas
Patrón (ya usado en Upgrade_Manager)
$current = get_option( 'convoca_<plugin>_version', '0.0.0' );
if ( version_compare( $current, '3.0.0', '<' ) ) {
// migrate 2.x → 3.0.0
upgrade_to_3_0_0();
update_option( 'convoca_<plugin>_version', '3.0.0' );
}
Migraciones planificadas para 3.0
| De |
A |
Migración |
| 2.7.x |
3.0.0 |
Renombrar metadatos deprecados si existieran |
| 2.7.x |
3.0.0 |
Reindexar assistant (rebuild índice) |
| 2.7.x |
3.0.0 |
Verificar tabla convoca_publisher_retry_queue |
| Legacy sp_/cp_ |
— |
No-op (no hay instalaciones antiguas, verificado en G3) |
Garantía
- Las migraciones son idempotentes (ejecutables N veces sin daño)
- Se ejecutan en transacción SQL cuando hay cambios de BD
- Verificadas por el health check (versión + estado de tablas)
6. Compatibilidad entre plugins
Matriz de dependencias declarada
| Plugin |
Requiere |
Dependencia débil (opcional) |
| convoca-core |
— |
— (base del ecosistema) |
| convoca-members |
convoca-core |
convoca-gateway (pagos), convoca-shifts (horas) |
| convoca-enroll |
convoca-core |
convoca-gateway (inscripción con pago), convoca-publisher (posters) |
| convoca-gateway |
convoca-core |
— |
| convoca-shifts |
convoca-core |
convoca-members (horas voluntariado) |
| convoca-publisher |
convoca-core |
convoca-enroll (posters) |
| convoca-assistant |
convoca-core |
convoca-members (datos socios) |
| convoca-theme |
convoca-core |
todos (presentacional) |
Reglas
- Activación ordenada: el plugin requiere core activo (ya implementado, con
wp_die amigable)
- Integración por hooks: los plugins se comunican SOLO vía hooks/REST públicos (nunca clases privadas de otro plugin)
- Degradación elegante: si un dependiente débil no está activo, el feature se oculta sin errores (patrón
class_exists/function_exists)
- Verificación: health check valida los 6 namespaces REST + flujos pagados en cada ejecución
7. Guía para desarrolladores externos
Publicada en wiki (docs.getconvoca.app)
- Arquitectura: theme 100% presentacional, API solo en plugins
- REST: lista de endpoints por namespace con permisos
- Hooks: HOOKS.md regenerado desde el código por plugin
- Shortcodes: tabla con parámetros y ejemplos
- Extensiones: patrón para añadir providers (ej: Email_Verifier, canales publisher)
Principios para contribuidores
- Nunca tocar el theme para lógica de negocio (solo presentación)
- Prefijos obligatorios:
convoca_* (funciones/hooks/opciones), _convoca_* (metadatos)
- Los hooks se documentan en el código (generan HOOKS.md automáticamente)
- Toda funcionalidad nueva requiere: código + test (health check o PHPUnit) + wiki
- Cambio de API → deprecación (2 versiones) antes de eliminar
Setup de desarrollo
# Clonar ecosistema
git clone [email protected]:josecarlosnieto91/convoca-core.git
git clone [email protected]:josecarlosnieto91/convoca-members.git
# ... (8 repos)
# PHPUnit
composer install
vendor/bin/phpunit
# Health check contra demo
git clone [email protected]:josecarlosnieto91/convoca-health-check.git
./bin/convoca-health --ssh=andromeda --path=/var/www/demo.getconvoca.app/public
8. Checklist de transición a v3.0
9. Riesgos y decisiones pendientes
| Riesgo |
Mitigación |
| PHPUnit bootstrap apunta a dev local (no CI) |
CI levanta WP test suite (workflow tests.yml ya creado) |
| wpcs 4.x cambia reglas de estilo |
Mantener 3.4.x (seguro, sin breaking) |
| 62 endpoints REST a mantener |
Health check cubre los críticos; PHPUnit cubre el resto |
| Versiones independientes por plugin |
Requiere política de compatibilidad cruzada (post-3.0) |