Skip to content

feat: build educational SoloQ player coach - #254

Open
saggacce wants to merge 47 commits into
mainfrom
feat/player-coach-paragon-roadmap
Open

feat: build educational SoloQ player coach#254
saggacce wants to merge 47 commits into
mainfrom
feat/player-coach-paragon-roadmap

Conversation

@saggacce

@saggacce saggacce commented Aug 27, 2026

Copy link
Copy Markdown
Owner

Closes #253

Qué incorpora

  • protege el historial personal frente a la retención general y amplía la importación personal a 60 meses
  • hace reproducible TimescaleDB con migración, compresión e índices
  • crea agregados locales de build, matchup e intervalos personales con muestra, fuente y confianza
  • añade un contrato educativo basado en evidencia, interpretación, práctica, excepciones y límites
  • reorganiza Analysis en seis apartados progresivos sin eliminar los módulos tácticos existentes
  • amplía build y loadout con contexto rival, orden de compra, augment, Eternal y Blessings
  • convierte Academia en un recorrido adaptativo con diagnóstico, cinco niveles, misiones revisadas y pruebas de promoción
  • añade mapa de competencias, tendencias, confianza e historial de evidencias en Academia y Perfil
  • evita puntuaciones engañosas mediante una estimación conservadora ligada a la confianza
  • añade el cliente Windows RiftLine Companion con captura exclusiva de Predecessor y overlay transparente
  • incorpora OCR local del modo, cierre de sesiones e informe auditable de observaciones e intervenciones
  • permite calibrar una segunda señal visual local mediante un recorte validado de un rótulo de modo
  • registra de forma silenciosa pantallas propias de reaparición y avisos explícitos de habilidad pendiente para revisión posterior
  • transforma las capturas en revisiones guiadas: hecho, inferencia, límite, pregunta, fragmento sugerido y clasificación razonada del jugador
  • permite adjuntar una grabación después, ajustar el desfase y realinear todos los marcadores
  • expone la cobertura real de cada detector, lo que puede demostrar, sus límites y la siguiente validación necesaria
  • permite etiquetar una señal como confirmada, falso positivo o no verificable sin mezclarla con la calidad de la decisión
  • mide eventos omitidos únicamente cuando el jugador confirma que revisó la grabación completa
  • crea o reutiliza una única revisión de calibración por sesión, incluso cuando el detector no produjo marcadores

Salvaguardas del acompañante

  • Ranked queda bloqueado de forma irreversible durante la sesión
  • un modo permitido exige dos señales automáticas coincidentes; el OCR por sí solo nunca activa coaching
  • una plantilla sólo se guarda tras doble lectura OCR, no se usa en su sesión de creación y debe alcanzar 94% en otra sesión
  • no hay consejos en combate ni con confianza insuficiente
  • máximo de cuatro intervenciones por diez minutos y supresión de conceptos repetidos
  • las primeras observaciones del HUD no puntúan, no atribuyen causas y nunca interrumpen la partida
  • una observación sin rúbrica aparece en el historial, pero no modifica dominio, tendencias ni ascensos
  • validar un detector no modifica competencias ni decide si una jugada fue buena o mala
  • sólo sesiones completadas y verificadas pueden aportar calibración de eventos de juego
  • las muestras con marcadores pendientes o no verificables quedan fuera de la estimación de cobertura
  • el overlay no recibe clics ni teclado y existe parada de emergencia con Ctrl+Shift+F10
  • no hay lectura de memoria, inyección, interceptación de tráfico ni automatización de controles
  • la página remota usa sandbox, aislamiento de contexto y un puente de capacidades cerrado
  • las capturas y el texto OCR completo permanecen en el equipo; sólo se conserva la firma visual calibrada
  • no se estima el acierto antes de 20 señales evaluables ni la cobertura antes de 20 eventos reales revisados

Validación

  • 223 tests en 38 ficheros
  • typecheck del repositorio y del cliente de escritorio
  • build web y build del companion
  • instalador Windows x64 generado y publicado por GitHub Actions
  • banco Electron real: puente aislado, filtro de ventanas, overlay visible y cero controles interactivos
  • recorrido autenticado de Mi ruta, Mi evolución, Perfil, Revisión de replay y Entrenamiento local en staging
  • panel de cobertura verificado visualmente, con detalles expandibles y sin desbordamiento horizontal
  • migraciones de validación y cobertura de detectores aplicadas correctamente en staging
  • comprobación responsive móvil sin desbordamiento horizontal
  • consola del navegador sin errores

Datos y límites

  • 134 partidas personales sincronizadas; 134 con eventos, oro e inventario
  • 114 con loadout y 133 con orden de habilidades; las ausencias restantes proceden de pred.gg
  • el posicionamiento se limita a puntos de eventos y no sustituye VOD
  • la detección del HUD actual sólo crea marcadores de revisión; recomendaciones de build, vuelta a base, objetivos y minimapa necesitan calibración con capturas reales
  • inventario/orden de compra, marcador de ambos equipos y minimapa figuran como pendientes, no como capacidades ya disponibles
  • el acierto de señales emitidas y la cobertura de eventos reales se calculan y presentan por separado
  • la versión privada 0.1 abre staging local; producción no se ha modificado
  • el instalador de prueba no está firmado y Windows SmartScreen puede advertir sobre él

Producción no se ha modificado.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 29c0848c56

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread README.md
npx prisma db push # create tables
cd ../..
docker compose -f docker-compose.database.yml up -d
npx prisma migrate deploy --schema workers/data-sync/prisma/schema.prisma

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Provide a complete baseline before using migrate deploy

On the newly created Docker database from the preceding command, this applies the entire migration history from scratch, but that history does not contain CREATE TABLE statements for several current models. For example, 20260525000001_sprint_roster_status_user_language/migration.sql immediately runs ALTER TABLE "User", while no earlier migration creates User, so the documented local setup aborts before Prisma generation or seeding. Retain the prior schema-push bootstrap or add a complete baseline migration before recommending this command.

Useful? React with 👍 / 👎.

Comment on lines +80 to +84
SELECT create_hypertable('"HeroKill"', 'syncedAt', chunk_time_interval => INTERVAL '7 days', if_not_exists => TRUE, migrate_data => TRUE);
SELECT create_hypertable('"ObjectiveKill"', 'syncedAt', chunk_time_interval => INTERVAL '7 days', if_not_exists => TRUE, migrate_data => TRUE);
SELECT create_hypertable('"StructureDestruction"', 'syncedAt', chunk_time_interval => INTERVAL '7 days', if_not_exists => TRUE, migrate_data => TRUE);
SELECT create_hypertable('"WardEvent"', 'syncedAt', chunk_time_interval => INTERVAL '7 days', if_not_exists => TRUE, migrate_data => TRUE);
SELECT create_hypertable('"Transaction"', 'syncedAt', chunk_time_interval => INTERVAL '7 days', if_not_exists => TRUE, migrate_data => TRUE);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Convert existing primary keys before creating hypertables

When upgrading a database created using the previously documented prisma db push flow, these event tables already exist with an id-only primary key, as defined by the pre-change Prisma schema. The preceding CREATE TABLE IF NOT EXISTS statements therefore do not install the new composite keys, and TimescaleDB rejects create_hypertable(..., 'syncedAt') because the existing unique primary-key index omits the partitioning column. This blocks the migration on existing installations; explicitly replace the keys or rebuild the tables before conversion.

Useful? React with 👍 / 👎.

Comment on lines +163 to +166
const completed = rows.current.length >= TARGET_MATCHES;
const successful = outcome === 'target_achieved' || outcome === 'improved';
const nextStatus = completed && goal.status === 'ACTIVE'
? successful ? 'ACHIEVED' : 'FAILED'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Require the configured target before marking a goal achieved

For a goal with a numeric target, outcomeFor can return improved merely because the first five matches are 5% better than the baseline even when the target is still missed. Treating that outcome as successful persists ACHIEVED—for example, a KDA target of 5 becomes achieved at 2.2 after improving from 2.0—and the goal then stops being active. Only target_achieved should complete goals that have targetValue; baseline improvement can be used for targetless goals.

Useful? React with 👍 / 👎.

<div style={{ marginTop: '0.8rem', padding: '0.8rem', borderRadius: 8, background: 'rgba(34,211,238,0.04)', border: '1px solid rgba(34,211,238,0.16)' }}>
<div style={{ display: 'flex', justifyContent: 'space-between', gap: '0.6rem', flexWrap: 'wrap' }}>
<strong style={{ fontSize: '0.78rem' }}>Comparación con jugadores de Pred.gg</strong>
{benchmark.benchmark.rating?.percentile != null && <span style={{ color: 'var(--accent-cyan)', fontSize: '0.67rem', fontWeight: 700 }}>Top {(benchmark.benchmark.rating.percentile * 100).toFixed(1)}% en Pred.gg</span>}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Display the complement of the rating percentile

Pred.gg's percentile represents the fraction of players below the player, so rendering it directly as a “Top” percentage reverses the ranking. The existing scouting page correctly uses 100 - percentile * 100; with the new expression, a player at percentile 0.90 is labeled top 90% instead of top 10%, materially misleading the benchmark shown to the player.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: coach educativo de SoloQ para jugadores

1 participant