Esta guia define como colaborar en drift para mantener calidad tecnica, consistencia de arquitectura y foco en producto.
drift existe para detectar deuda tecnica asociada a codigo IA en proyectos TypeScript y convertir esa senial en acciones concretas.
- Runtime: Node.js 20.x and 22.x (LTS)
- Lenguaje: TypeScript (
type: module) - Analisis AST:
ts-morph - CLI:
commander - Output en consola:
kleur - Testing:
vitest
src/analyzer.ts: motor principal de reglas y scoresrc/rules/*: reglas por fases y helpers de deteccionsrc/reporter.ts: armado de reporte y salidas para markdown/AIsrc/printer.ts: salida CLI y sugerencias de fixsrc/cli.ts: entrypoint y subcomandossrc/fix.ts,src/report.ts,src/ci.ts,src/diff.ts: comandos operativospackages/eslint-plugin-drift: plugin ESLintpackages/vscode-drift: extension VSCode
Usar los comandos del repo (fuente: package.json):
npm run build
npm run dev
npm start
npm test
npm run test:watch
npm run test:coverageComandos de uso de producto (referencia):
npx @eduardbar/drift scan ./src
npx @eduardbar/drift scan ./src --ai
npx @eduardbar/drift scan ./src --min-score 60- Mantener cambios pequenos, enfocados y trazables.
- No editar
dist/manualmente. - No introducir
anysin justificacion tecnica fuerte. - Reusar utilidades existentes (
utils.ts) antes de duplicar logica. - Si agregas una regla nueva, actualizar:
- peso en
RULE_WEIGHTS - deteccion AST
- sugerencia de fix
- documentacion (README/AGENTS/PRD segun aplique)
- peso en
Se usa Conventional Commits.
Formato:
type(scope): descripcion corta
Tipos recomendados:
feat: nueva capacidad de productofix: correccion de bugrefactor: cambio interno sin impacto funcionaltest: mejoras o nuevos testsdocs: documentacionchore: mantenimiento
Ejemplos:
feat(review): add PR score and markdown outputfix(analyzer): prevent false positive in dead-file ruledocs(prd): define v1.2 architecture roadmap
- Explicar objetivo de negocio y usuario.
- Delimitar que entra y que queda fuera.
- Agregar criterios de aceptacion verificables.
- Identificar comandos, modulos y reglas afectados.
- Definir formato de salida (CLI/JSON/AI).
- Evaluar costo de performance en repos grandes.
- Primero contrato de tipos y salida.
- Luego deteccion/reglas/comandos.
- Finalmente UX de consola y documentacion.
- Tests unitarios de logica nueva.
- Tests de integracion de CLI cuando aplique.
- Verificacion manual de casos reales.
Antes de merge, cada cambio debe cumplir:
- Tests pasando (
npm test). - Cobertura razonable en paths nuevos (
npm run test:coveragecuando aplique). - Sin regresiones en salida JSON/AI (contratos estables).
- Errores y mensajes de CLI claros y accionables.
- Performance aceptable para el alcance del cambio.
- Nunca commitear secretos (
.env, tokens, credenciales, llaves). - No incluir datos sensibles en fixtures ni snapshots.
- Si una feature requiere integracion externa, usar variables de entorno y documentar setup sin exponer valores.
- Mantener principio de minimo privilegio en scripts y flujos CI.
Una feature se considera lista cuando:
- Resuelve un objetivo explicitado en
docs/PRD.md. - Tiene MVP funcional y criterios de aceptacion cumplidos.
- Incluye tests y documentacion operativa.
- Es compatible con flujo CLI existente y CI.
- Priorizar cambios que mejoren senial sobre ruido.
- Favorecer reportes accionables por sobre analisis abstracto.
- Evitar humo en roadmap: cada entrega debe mapear a comando, salida y test.
- Dejar decisiones registradas en la documentacion del repo.