Orquestador docente de evaluación masiva, autograding multicanal y gestión de entregas en C (compatible con GitHub Classroom y Moodle).
Dredd está desarrollado en Python 3.11+ con typer y rich.
# Instalación en modo desarrollo
cd dredd
uv sync --extra dev
# Ver catálogo de comandos
uv run dredd --helpClona o actualiza el repositorio en <actividad>-submissions/<estudiante>/, ejecuta el análisis con el motor Ripley (o fallback nativo con reglas P1 de cátedra) y ensambla ${estudiante}.md:
# Evaluar un estudiante puntual
dredd eval tp01 alvarez_juan
# Evaluar toda la cohorte presente en el workspace
dredd eval tp01 --allEnvía automáticamente el informe ${estudiante}.md como comentario en el Pull Request abierto del estudiante utilizando GitHub CLI (gh):
dredd comment tp01 alvarez_juan --openReconstruye o abre el Pull Request de corrección en caso de que el estudiante no lo haya generado o haya alterado las ramas base:
dredd pr-fix tp01 alvarez_juanDescomprime el ZIP masivo de Moodle, normaliza la codificación a UTF-8 (soportando CP1252, ISO-8859-1 y UTF-8-sig), aplana las carpetas y genera versiones deterministas (r1, r2, ...) mediante hash SHA-256 en .metadata.db:
dredd moodle ingest entregas_tp01.zipVincula heurísticamente o mediante interfaz interactiva los archivos fuente .c de los estudiantes con los testcases correspondientes, guardando las reglas en mappings.json:
dredd map tp01_1228009 -e ejercicio1 -e ejercicio2 --autoGenera el archivo CSV compatible con el Libro de Calificaciones de Moodle, el ZIP de retroalimentación masiva para subir al aula virtual y el reporte dashboard.md con estadísticas de la cohorte:
# Exportación completa (CSV + ZIP + Dashboard)
dredd export tp01_1228009
# Exportación puntual de planilla CSV
dredd moodle export -e tp01 -o calificaciones.csvCalcula la matriz de similitud de código fuente normalizado en todas las entregas descargadas utilizando el algoritmo Winnowing:
dredd plagiarism tp01_1228009 --threshold 0.70Convierte informes Markdown a HTML enriquecido autocontenido (con CSS embebido) o PDF con formato de imprenta (generación pura en Python sin dependencias externas pesadas):
# Exportar a HTML
dredd export-report tp01_1228009/alvarez_juan/alvarez_juan.md --format html
# Exportar a PDF
dredd export-report tp01_1228009/alvarez_juan/alvarez_juan.md --format pdfsrc/dredd/
├── cli.py # Punto de entrada Typer y comandos CLI
└── core/
├── ast_checker.py # Linter nativo de reglas P1 (0xXXXXh) y AST
├── db.py # Capa SQLite de persistencia (.metadata.db)
├── exporter.py # Generador de CSV Moodle, ZIP feedback y dashboard
├── git_ops.py # Gestión de caché local de repositorios de estudiantes
├── github_api.py # Integración con gh CLI (PRs y comentarios)
├── ingest.py # Ingesta masiva de ZIPs Moodle, encodings y SHA-256
├── makefile_eval.py # Soporte para proyectos modulares con Makefiles
├── mapping.py # Mapeo heurístico e interactivo (mappings.json)
├── moodle.py # Adaptadores y utilitarios para Moodle
├── plagiarism.py # Detector de similitud por huellas Winnowing
├── report_export.py # Conversor Markdown a HTML y PDF (zero-dependencies)
├── reporter.py # Ensamblador de informes Markdown modulares
└── ripley_client.py # Cliente de integración con el motor stateless Ripley