Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

refactor(leaderboard): split recompute-all-skills.ts, 210 LOC over the 200 LOC limit

Abierto Apto para principiantes
#27 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Refactorización
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
typescript
Área
backend

Línea de trabajo

Empieza leyendo apps/web/app/lib/leaderboard/recompute-all-skills.ts, especialmente recomputeBatch en la línea 31 y el bucle por skill que comienza aproximadamente en la línea 139. Extrae el bucle a un helper específico sin duplicar las funciones de scoring y, después, usa wc -l para verificar que cada archivo resultante tenga menos de 200 líneas, preservando la orquestación del batch y el comportamiento de retorno.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

refactor

Summary

apps/web/app/lib/leaderboard/recompute-all-skills.ts is 210 lines, above the 200 LOC per-file limit in the project conventions. The bulk recompute path is the only leaderboard module over that limit.

Evidence

  • wc -l apps/web/app/lib/leaderboard/recompute-all-skills.ts → 210
  • CLAUDE.md, section "Important Caveats": "Max 200 LOC per file — split into focused modules if exceeded."
  • The code review measured 243 lines before the N+1 rework; the file is still over the limit after that change, so the rework reduced but did not resolve it.
  • Neighbouring modules for comparison: apps/web/app/routes/api.admin.recompute.ts is 131 lines and apps/web/app/lib/leaderboard/recompute-skill-scores.ts is a separate single-skill path.

Expected behavior

Split the module so each file stays under 200 lines. The per-skill compute-and-update loop (roughly lines 139-176, from for (const skill of batch) through the db.update(...) call) is the natural extraction, leaving recomputeBatch responsible for offset resolution, state persistence, and the return value.

Flow

flowchart LR
  A[recomputeBatch] --> B[resolve offset from KV]
  B --> C[global stats + batch fetch]
  C --> D[per-skill compute loop 210 LOC total]
  D --> E[persist KV state]

The loop labelled D is the extraction candidate; everything else is batch orchestration.

Evidence

  • Affected code: apps/web/app/lib/leaderboard/recompute-all-skills.ts:31 (recomputeBatch), apps/web/app/lib/leaderboard/recompute-all-skills.ts:139 (start of the per-skill loop)
  • Related: plans/reports/code-reviewer-260306-1531-admin-recompute-endpoint.md, section "5. recompute-all-skills.ts exceeds 200 LOC limit"

Open questions

  • Should the extracted helper move to a new recompute-skill-update.ts, or should the aggregate fetch block be the part that moves instead?

Notes

  • The extraction is mechanical and behavior-preserving. The scoring functions in leaderboard-scoring.ts are already shared with the single-skill path, so the split should not duplicate scoring logic.
Lenguaje dominante
TypeScript
Estrellas
189
Forks
40
Merge medio
6 h 54 min
PR fusionados (30 d)
24

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de nextlevelbuilder/skillx

Todos los issues de nextlevelbuilder/skillx

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.