Gracias por tu interés en contribuir a jamkernelp2p. Este proyecto es abierto y acepta contribuciones de todo tipo.
Si encuentras un error, abre un issue en GitHub incluyendo:
- Descripción clara del problema
- Pasos para reproducirlo
- Entorno (navegador/Node.js/Deno, versión)
- Output del log si está disponible (
--log-level debug) - Si el error es de conexión, incluir el peerId y los eventos de consola
Si tienes una idea para mejorar jamkernelp2p, abre un issue con la etiqueta "enhancement" describiendo:
- El problema que resuelve
- Cómo lo implementarías
- Si estás dispuesto a desarrollarlo
- Si afecta al core (zero-deps) o puede ser un plugin externo
El kernel tiene 15+ fixes aplicados. Cambios en estas áreas REQUIEREN pruebas manuales:
| Área | Riesgo |
|---|---|
Sandbox.onmessage (WorkerPool) |
Crash silencioso en workers |
pc.ondatachannel (BrowserAdapter) |
WebRTC no recibe canales entrantes |
BatchStorage flush |
Corrupción de datos compartidos |
identity.verify() sin await |
Falsos positivos de firma |
Mutex dead code |
Bloqueos perpetuos |
ws.onerror + reconnect doble |
Conexiones duplicadas |
| Duplicación de métodos mesh | Comportamiento impredecible |
- Haz un fork del repositorio
- Crea una rama:
git checkout -b mi-mejora - Haz tus cambios
- Ejecuta validación básica:
node -c jamkernelp2p.js # sintaxis node -e "require('./jamkernelp2p.js')" # carga node -e "const j=require('./jamkernelp2p.js'); j.JAMOmni.createKernel({}).then(k=>k.destroy())" # ciclo de vida
- Si agregas flags al CLI, actualizar
MANUAL.mdy la sección--helpen el kernel - Si agregas eventos, documentarlos en
MANUAL.mdsección API - Haz commit:
git commit -m "Descripción clara del cambio" - Push:
git push origin mi-mejora - Abre un Pull Request
- Código en JavaScript ES6+ sin transpilación
- Sin dependencias externas (el núcleo debe permanecer zero-deps)
- Usar WebCrypto API para toda operación criptográfica
- No agregar comentarios superfluos (explica el qué, no el cómo)
- Seguir indentación de 4 espacios
- Funciones asíncronas siempre con
async/await, no Promesas raw - Las propiedades internas (no parte de la API pública) deben empezar con
_
Actualmente no hay suite automatizada. Para contribuir:
-
Prueba manualmente el flujo completo:
# Terminal 1: servidor node jamkernelp2p.js --port 9090 --room test --password 12345678 --log-level debug # Terminal 2: peer node -e " const {JAMOmni}=require('./jamkernelp2p.js'); (async()=>{ const k=await JAMOmni.createKernel({signalServer:'ws://localhost:9090'}); const id=await k.whenIdentityReady(); console.log('Peer:',id.peerId); k.events.on('mesh:peer_discovered',p=>console.log('Descubierto:',p)); await k.startSession('test','12345678'); await k.broadcast({text:'hola'}); })() "
-
Si agregas funcionalidad, incluye en el PR cómo probarla
Al contribuir a jamkernelp2p, aceptas los siguientes términos:
-
Dual License: El proyecto se distribuye bajo GNU GPL v3 para uso open source, y bajo licencia comercial para uso propietario. Para mantener este modelo, todos los contribuyentes deben firmar un Contributor License Agreement (CLA) cediendo los derechos de autor de sus contribuciones a Félix Martínez.
-
Proceso CLA:
- Lee y firma el CLA.md
- Envía el CLA firmado a jamkernelp2p@gmail.com o adjúntalo a tu Pull Request
- Sin CLA firmado, no podremos aceptar contribuciones
Sin el CLA firmado, el titular del proyecto no puede relicenciar tus contribuciones bajo la licencia comercial, lo que rompe el modelo de licenciamiento dual.