refactor(leaderboard): split recompute-all-skills.ts, 210 LOC over the 200 LOC limit
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
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→210CLAUDE.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.tsis 131 lines andapps/web/app/lib/leaderboard/recompute-skill-scores.tsis 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.tsexceeds 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.tsare 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
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de nextlevelbuilder/skillx
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
nextlevelbuilder/skillx#49 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
nextlevelbuilder/skillx#28 ·
Los mantenedores suelen responder en 1 día
-
Harden personal kit proposal scanning before enabling the API flagPosiblemente ocupada @mrgoonie la tomó hoy. Abierto
nextlevelbuilder/skillx#86 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 18/100
nextlevelbuilder/skillx#84 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 12/100
nextlevelbuilder/skillx#81 ·
Los mantenedores suelen responder en 1 día
Todos los issues de nextlevelbuilder/skillx
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
stellar/stellar-dev-skill#151 ·
Los mantenedores suelen responder en 1 día
-
Trial & Error: guided Blind offer squeezes on phones and sits under the touch toolbar on iPadAbiertoarea:arcade game ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
fderuiter/deruiter.dev#2281 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
scope: data grid type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
fix(frontend): correct VITE_IS_DEVELPOMENT typo in shared/app.ts and align dev environment flagsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
vicharanashala/ajrasakha#1439 ·
Los mantenedores suelen responder en 1 día
-
Add: TV5Monde AsieAbiertoapproved check:passed streams:add
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día