Contribuir
Gracias por el interés. Participar implica respetar el código de conducta. Antes de abrir un PR:
-
Abre un issue para hablar de cambios grandes.
-
Corre las pruebas y el lint:
Ventana de terminal make dev-setup # una vezmake check # pruebas y contratos de arquitectura del backend + tipos y lint del panelEl CI (
ci.yml) repite esto en cada PR, comprueba quepitangus/app/staticestá recompilado (make web) y analiza el PR con el propio Pitangus: bloquea si introduce algo de severidad alta o superior. -
Mantén las reglas de la casa:
- Sin dependencias nuevas en el backend salvo que sea imprescindible: hoy son las de
requirements.txt(FastAPI, uvicorn, Pydantic, SQLAlchemy, Alembic, psycopg,cryptographyy ReportLab), con versión fijada. - Ningún secreto en logs, respuestas ni ficheros de
data/. Los secretos van porvault.py. - Cada ruta nueva se declara con su permiso, su cabecera de acción (POST) y su tamaño máximo de cuerpo; la prueba de la tabla de rutas lo comprueba.
- Lo que no se pudo probar se dice (
not_testedcon motivo); nunca se presenta como «sin vulnerabilidades». - Código, identificadores y comentarios en inglés. Todo texto que lee una persona (interfaz, errores, hallazgos, informes) va en inglés y en español por los catálogos: interpreta, no traduzcas (
.claude/skills/pitangus-i18n/SKILL.md). La documentación, endocs/(inglés) ydocs/es/(español). - Si cambias el formato de algo que ya está en
data/: lector tolerante y, si hay que reescribir datos, una migración con su prueba (ver desarrollo.md).
- Sin dependencias nuevas en el backend salvo que sea imprescindible: hoy son las de
-
Nunca pegues tokens, claves ni logs sin revisar en issues o PRs.
Firma del CLA. En tu primer PR, un bot te pedirá aceptar el Acuerdo de Licencia de Contribución con un comentario. Conservas los derechos de autor; el acuerdo permite distribuir tu aporte bajo la AGPL-3.0 (las reglas de rules/, bajo MIT) y también en una posible edición comercial, con el compromiso de que siga disponible en la edición libre.
Detalles para ejecutar sin contenedores en docs/es/desarrollo.md.