📊 Métricas de Impacto: Aprendizaje y Ecosistema¶
Filosofía de Medición
No medimos para controlar, sino para aprender. Buscamos capturar la velocidad de aprendizaje, la fiabilidad operativa y el crecimiento de la comunidad sin caer en métricas de vanidad.
Ciclo de Valor Cognitivo
graph TD
A[💡 Idea / Reto] --> B[💻 Ejecución Local]
B --> C[🔄 PR & Review]
C --> D[🚀 Merge & Deploy]
D --> E[🎓 Lección Aprendida]
style A fill:#e7ae4c,stroke:#333,stroke-width:2px,color:#fff
style B fill:#37a880,stroke:#333,stroke-width:2px,color:#fff
style C fill:#e0e7ff,stroke:#333,stroke-width:2px,color:#182232
style D fill:#f1f5f9,stroke:#182232,stroke-width:2px,color:#182232
style E fill:#ffffff,stroke:#182232,stroke-width:2px,stroke-dasharray: 5 5,color:#182232
1. 🎓 Métricas de Aprendizaje (Gamificación)¶
Instrumentamos GitHub Projects para que el aprendizaje sea visible y recompensado.
🚀 TTFP (Time to First PR)
La Métrica Reina. Tiempo desde que un usuario dice "Hola" hasta que su primer PR es aceptado. Si baja, nuestro onboarding es de clase mundial.
⚡ Learning Velocity
Número de issues `learning-task` completados por semana. Mide la salud y curiosidad de la cohorte activa.
Sistema de Experiencia (XP)¶
Recompensamos el impacto real, no el tiempo en la silla.
| Nivel de Tarea | Recompensa (XP) | Ejemplo |
|---|---|---|
| Nivel 1 | 10 XP |
Primer análisis, corrección simple |
| Nivel 2 | 25 XP |
Nueva visualización, mejora de docs |
| Nivel 3 | 50 XP |
Automatización CI/CD, nuevo modelo |
| Nivel 4 | 100 XP |
Arquitectura, gobernanza, mentoring |
🏅 Badge Propietario (Owner Badge)¶
El Badge Propietario reconoce a early adopters que han alcanzado un nivel de confianza elevado manteniéndose aún en fase temprana.
Requisitos¶
- Pull Request aprobada por CODEOWNERS
- Autor con ≤ 10 contribuciones públicas en el repositorio
- Revisión aprobada registrada vía GitHub API
Flujo automático¶
- CODEOWNERS aprueba la PR
- El workflow verifica el número total de commits del autor
- Si cumple el umbral:
- Se marca el item del Project v2 como
codeowner-approved - Se actualiza
early-adopters.json - Se añade comentario en la PR con el badge SVG
Beneficios¶
- 🧠 XP extra en métricas de talento
- 🏷️ Distintivo visible en PRs y portal
- 🚀 Prioridad en labs y challenges avanzados
Badge visual¶
El sistema muestra el siguiente SVG institucional:
docs/assets/badge-owner.png
Las reglas dinámicas de XP residen en
metrics/xp-rules.yml. Cambiar esa configuración ajusta la recompensa (base_xp, multiplicadores y niveles) sin tocar los flujos de GitHub Actions ni los scripts de aprobación.
Ledger cognitivo de usuarios¶
Registramos el estado de cada contribuidor early-adopter en metrics/users/<username>.json. Este ledger auditable incluye:
xp: total actual.level: nivel fiscalizado (L0,L1, …).badges: mapa de badges con timestamp, XP otorgado y PR de origen.history: lista ordenada de eventos (badge,xp,feedback, …).last_seen: ISO8601 de la última interacción (opcional).feedback: colección de notas cualitativas o enlaces a discussions (opcional).
Por ejemplo, metrics/users/octocat.json contiene el owner_badge adjudicado el 2026-02-06T18:40:00Z y el XP correspondiente. Cada actualización puede registrarse por el workflow (o manualmente) y versionarse junto al repo para mantener trazabilidad y portabilidad.
El script
scripts/validate-gamification.pyse ejecuta enci-pythonpara garantizar que la config declarativa (metrics/xp-rules.yml) y cada ledger enmetrics/users/sigan el esquema esperado.
Por qué esto es sólido¶
- ✅ Declarativo:
metrics/xp-rules.ymldefine XP, multiplicadores y niveles; cambia el fichero y el flujo sigue funcionando sin tocar código. - 🧾 Auditable: cada ledger
metrics/users/<username>.jsonse versiona, se valida y se puede consultar como registro histórico. - ⚙️ Escalable: puedes añadir nuevos badges, misiones o niveles sin reescribir workflows; el mismo script se adapta con más reglas.
- 📦 Portable: los ledgers y SVG pueden exportarse a una API, dashboard o certificación exterior sin depender de servicios externos.
- 📚 Compatible: se integra con Project v2, el talent portal y los planes de labs para priorizar el talento que realmente juega, aprende y colabora.
Esto ya te permite: - Rankings no tóxicos. - Itinerarios formativos. - Priorizar talento real basándote en evidencia.
Secrets requeridos¶
GITHUB_TOKEN(token automático, pero necesita permisos ampliados sobrecontents,pull_requests,issuesyprojects)CODEOWNERS_TOKEN(o PAT equivalente) para leer la membresía de CODEOWNERS y aplicar la etiquetacodeowner-approvedGITHUB_APP_ID+GITHUB_APP_PRIVATE_KEY(preferido) oPROJECT_TOKEN(fallback PAT) para actualizar Projects v2; junto conPROJECT_URLpara mover ítems aDone
Permisos mínimos¶
repository contents: write(actualizarearly-adopters.json, comentarios, etiquetas)pull_requests: write(leer reviews, añadir comentarios y etiquetas)issues: writeprojects: write(Project v2)
✍️ Credenciales firmadas por LAB completado¶
Cada lab aprobado emite una credencial verificable basada en Open Badges para que el talento pueda compartirla en CVs, portfolios o wallets futuras. El template declarativo vive en credentials/templates/lab-credential.json y admite placeholders como {{github_user}}, {{uuid}} o {{detached_signature}}.
La firma recomendada es Ed25519 y se realiza dentro del workflow al cerrar el lab:
La credencial firmada se graba en credentials/users/<user>/LAB-010.json, se commitea y permanece como ledger verificable y portátil. Así queda probada la evidencia técnica (PR, CI, commits) sin necesidad de backend adicional.
🏛️ Roles regulatorios basados en XP¶
El archivo governance/roles.yml define qué niveles regulatorios habilitan roles formales (reviewer, auditor) y qué dominios de confianza les acompañan. Cada vez que xp_regulatory cambia, un pipeline (o script nightly) reevalúa las reglas, actualiza metrics/users/<user>.json con roles y trust_domains, y puede reflejarse en CODEOWNERS dinámicos, GitHub Teams o bloqueos/labels especiales.
Los roles conllevan grants reales (can_review_prs, can_approve_compliance, can_block_merge) para que el mérito gobierne el flujo, no el cargo.
📊 Demo ejecutable del dashboard vivo¶
La demo mínima (Streamlit + JSON) está en dashboard/app.py. Usa los ledgers en metrics/users/*.json como single source of truth y muestra XP total/efectivo/regulatorio, labs, roles y badges. Para levantarla:
Es local, soberana y suficiente para mostrar a inversores, instituciones o partners educativos que el sistema sigue XP real, decay, roles y trazabilidad completa.
🧬 XP decay mensual y ledger vivo¶
El fichero declarativo metrics/xp-decay.yml define el half_life_days (180) y el floor_ratio (0.4) que se aplican a cada evento de la historia de un usuario. El job programado .github/workflows/xp-decay-monthly.yml ejecuta python scripts/apply-xp-decay.py el primer día de cada mes a las 03:00 UTC, recalculando xp_effective, sumando xp_total y registrando el timestamp last_decay sin borrar el histórico. Los valores resultantes mantienen la meritocracia viva: xp_total conserva la huella completa, xp_effective alimenta niveles y desbloqueos, y xp_regulatory no decae.
🏛️ XP regulatorio (compliance, QA, security)¶
Las reglas de XP regulatorio están en metrics/xp-regulatory.yml: cada entrada (security_review, compliance_check, qa_audit, …) define XP, etiquetas exigidas y dominios de confianza. El workflow .github/workflows/regulatory-xp-award.yml se dispara cuando un PR recibe la etiqueta correspondiente, ejecuta scripts/award-regulatory-xp.py, registra eventos con type: "regulatory" y non_decay: true, suma XP a xp_total y xp_regulatory, y documenta la ganancia con un comentario en la PR y un commit del ledger. El auditor puede revisar los dominios y reglas premiadas gracias al output JSON que deja el script bajo metrics/users/<username>.json.
🎓 Labs desbloqueados y créditos formativos¶
La hoja labs/lab-unlocks.yml define requisitos claros (xp_effective, xp_regulatory, badges y dominios) para cada lab. El ledger del usuario (metrics/users/<username>.json, basado en metrics/users/template.json) mantiene labs_unlocked, labs_locked y lab_credits con equivalencias de créditos/ECTS. Cada vez que se actualiza xp_effective, las automatizaciones pueden recalcular qué labs quedan disponibles y qué itinerarios formativos se abren. El ejemplo de metrics/users/octocat.json muestra cómo un early adopter con xp_total: 320, xp_effective: 220, xp_regulatory: 100 tiene LAB-010 desbloqueado y un crédito pendiente para LAB-020.
📊 Dashboard vivo y trazabilidad¶
La single source of truth está en metrics/users/*.json, metrics/xp-rules.yml y labs/lab-unlocks.yml. El validator scripts/validate-gamification.py (ejecutado desde ci-python) asegura que la configuración, el decay y cada ledger cumplen con el esquema esperado. Con esos artefactos puedes construir un dashboard local (Streamlit + JSON) o público (Astro/Next.js) que muestre XP total/efectivo/regulatorio, niveles, timeline del decay, labs desbloqueados/próximos y gobernanza (badges y dominios). Además, cada ledger registra last_seen, feedback, domains y lab_credits para mantener la conversación humana alrededor del talento.
🇪🇺 Exportaciones y dossiers¶
Hemos añadido la carpeta exports/ para transformar el ledger en evidencias de valor europeo.
exports/templates/europass.xmlyexports/render_europass.pygeneranexports/out/<user>-europass.xmla partir de cadametrics/users/<user>.jsony de las credenciales encredentials/users/<user>. Los XML resultantes pueden subirse directamente al portal Europass, FP Dual o Erasmus+, ya que incluyen identificación, labs completados y skills reputadas.exports/templates/dossier.mdyexports/render_dossier.pyconsolidan métricas (perfiles, auditores, revisores) y evidencias firmadas en un dossier Markdown que se puede convertir a PDF (pandoc exports/out/dossier.md -o exports/out/dossier.pdf), perfecto para licitaciones o convenios.exports/generate_zk_proof.pypublicadashboard/public/zk-proof.jsoncon hashes de usuarios que cumplen el umbral de auditores (xp_regulatory ≥300), habilitando transparencia sin revelar identidades.exports/generate_territorial_kpis.pyconsolida territorios (región/provincia/programas ITI/FP_DUAL) y escribedashboard/public/kpis-territorial.json, ideal para informes territoriales y fondos europeos.
Usa exports/run_exports.py para ejecutar todo el pipeline a la vez y mantener los artefactos en exports/out/ y dashboard/public/ listos para distribuir o versionar.
2. ⚙️ Métricas de Flujo & Fiabilidad¶
Para garantizar entregas sostenibles y prevenir el burnout.
Cycle Time
Tiempo de In Progress a Done. Objetivo: Reducir bloqueos y esperas externas.
CI Reliability
Porcentaje de builds verdes ('Success'). Un pipeline roto bloquea el aprendizaje.
Sovereign Adoption
% de PRs que respetan el principio Local-First. Sin dependencias ocultas de la nube.
3. 🌍 Métricas de Ecosistema¶
Conectando el código con el impacto territorial.
- ✅ GitOps Coverage: % de componentes con IaC y pipelines reproducibles.
- ✅ Territorial Impact: Número de eventos comunitarios y estudiantes activos en regiones objetivo (ITI Andalucía, UE, LATAM).
4. 🛠️ Implementación Rápida (15 min)¶
Configura tu GitHub Project v2 para empezar a medir hoy.
Crea las siguientes columnas personalizadas:
* Status: Backlog, In Progress, Review, Done.
* Area: Learning, GitOps, Docs, Backend.
* XP (Number): Para sumar puntuaciones.
* KPI (Text): Etiquetas como "TTFP", "Reliability".
- Activa los workflows
add_to_project.yml. - Usa etiquetas para asignar XP automáticamente.
Recuerda: Si se mide mal, se destruye la cultura. Medimos para mejorar el sistema, nunca para juzgar a las personas.