Validación multi-repo de referencias en fuentes wiki
Problema
El sistema de lint/reclaim de la wiki Supercontexto validaba referencias a código (sources.code[].ref) contra un único repositorio hardcodeado: CreaRackSL/CreaRack-Pro.
Esto causaba falsos negativos críticos: las 11 páginas wiki que documentaban código del CreaRackSL-workspace (handlers MCP, drift.ts, scripts, crons) reportaban 404 y quedaban marcadas como stale de forma permanente. El proceso reclaim nunca podría recuperarlas porque no encontraba las fuentes.
Impacto:
- Pages aisladas de workspace documentadas pero irrecuperables
- Confiabilidad de lint/reclaim cuestionada
- Duplicación de lógica de validación en 3 funciones distintas
Decisión
Crear una función auxiliar sourceRefExists(ref, ghPat) que:
- Intenta el repo predicho según
repoForSourcePath()(heurística del drift-check que acierta ~95% de veces) - Fallback al otro repo si el primero falla
- Devuelve consumo de fetches para que cada caller ajuste su presupuesto de subrequests (CF Workers tiene límite ~50)
Reemplazar los 3 bloques de fetch hardcodeados en:
wikiLintCheck()— chequeo de fuentes en operaciones de actualizaciónwikiLintBulk()→ pass sources — chequeo de todas las pages en batchwikiLintBulk()→ pass reclaim — validación antes de recuperar pages stale
Rationale
- Reutilización:
repoForSourcePath()ya existe (drift-check), no reinventar - Eficiencia: predicción correcta → 1 fetch (98% de casos); fallo → 2 fetches (ambos repos)
- Robustez: fallback empírico evita false positives sin perder cobertura
- Presupuesto acotado: cada fetch se descuenta del límite de subrequests
- Recuperación: 11 pages del workspace ahora pueden ser recuperadas por reclaim
Consecuencias
✅ Positivas:
- Pages del workspace con drift real ahora se validan correctamente
- Lint/reclaim pueden actuar sobre el conjunto completo de pages (Pro + workspace)
- Una sola función de validación centraliza la lógica
- Coste medio: 1 fetch por fuente (vs 1 antes, pero correcto)
⚠️ Trade-offs:
- Fallback a segundo repo consume extra fetch en ~5% de casos (ambigüedad de prefijos:
scripts/,.github/, etc.) - Presupuesto de subrequests puede apretarse si hay muchas fuentes rotas
- Requiere que
repoForSourcePath()esté sincronizado con la estructura real de ambos repos
Bonus
Se normalizaron 5 líneas largas preexistentes con prettier:
- Formatting de argumentos en
ghPutFile()(3 calls) - Ternario en asignación de
actoryreclaimLimit - Cálculo de
estimatedCostUsd(paréntesis para claridad)
Véase también
- [[entity—biblioteca—service—wiki-handlers-crud]]
- [[entity—biblioteca—handler—bib-check-drift-for-doc]]
- [[decision—20260514—kb-vs-graph-drift-detection]]
- [[entity—biblioteca—table—bib-drift-checks]]
- [[concept—biblioteca—source-validation]]