=============================================================== HUMAN-IN-THE-LOOP — Lo que NO puede automatizarse 100% =============================================================== POR QUÉ NO ES VIABLE EL FULL-AUTO --------------------------------- Hay archivos donde el upstream y nuestro fork divergen intencionadamente. Aplicar automáticamente el upstream ROMPERÍA nuestra app móvil. Estos archivos SIEMPRE requieren revisión humana antes de aplicar cualquier cambio. LISTA DE ARCHIVOS "PROHIBIDOS" PARA AUTO-MERGE ---------------------------------------------- src/client/assets/themes/OasisMobile.css Razón: Es nuestro tema de móvil, escrito desde cero. El upstream lo trata como tema de escritorio. Aplicar el de upstream rompería: hamburger nav, QR lightbox, panel-quicklinks, sidebar-panel drawer. src/client/assets/styles/mobile.css Razón: 100% nuestro. Contiene el paginador actpager, safe-area iOS, header móvil de 1-fila + 2-fila, todo el sistema mobile. src/client/public/js/mobile-ui.js Razón: Ya no se usa (paginador pasó a CSS-only) pero si upstream añade un mobile-ui.js distinto, NO copiar. src/views/mobile_pager.js Razón: Helper nuestro, no existe en upstream. src/views/main_views.js Razón: Contiene nuestro menú hamburger CSS-only, sidebar-panel drawer, panel-quicklinks. El upstream no tiene esto. Aplicar pisaría todo nuestro layout. EXCEPCIÓN: Si solo cambian textos / strings i18n, se puede hacer merge cuidadoso. Pero requiere mirada. src/views/inhabitants_view.js Razón: Tiene nuestros QR codes integrados (qr-share con
/). El upstream no. Hay que merge manual preservando los QR. src/views/invites_view.js Razón: Tiene nuestros QR por cada pub + IIFE async + inviteLog renderInviteExtra. src/views/tribes_view.js Razón: QR de tribe invite + nuestros campos del form (isAnonymous, isLARP, isSubEdit). src/models/tribes_model.js Razón: Tiene NUESTRO inviteLog (generateInvite + joinByInvite). El upstream no. Si copiamos, perdemos la trazabilidad de invites. src/models/main_models.js Razón: Publica SSB msg type:'pub-invite' al aceptar pub invite. Es nuestro. src/backend/backend.js Razón: Tiene rutas custom (POST /settings/invite/accept, nuestro orden de constructores). Cualquier cambio upstream debe integrarse manualmente. src/configs/config-manager.js Razón: Defaults modificados (wish, pmVisibility, economy modules on, etc). src/server/package.json Razón: NO añadir las deps nuevas del upstream: - @xenova/transformers (60MB+) - node-llama-cpp (no funciona arm64 mobile) - pdfjs-dist (pendiente probar, anotar para luego) src/client/middleware.js Razón: Tiene 'unsafe-inline' en CSP necesario para nosotros + mounts /game-assets /maptiles /mapcache custom + frame-src 'self'. LISTA DE ARCHIVOS "SAFE" PARA AUTO-MERGE ---------------------------------------- src/client/assets/translations/*.js Las traducciones son aditivas. Pueden copiarse al 100% del upstream sin riesgo. src/client/assets/themes/Clear-SNH.css src/client/assets/themes/Dark-SNH.css src/client/assets/themes/Matrix-SNH.css src/client/assets/themes/Purple-SNH.css Temas de escritorio, no afectan a móvil. src/views/*_view.js (NUEVOS) Si el archivo no existe en nuestro fork, copia auto. Ej: graphos_view.js, markdown.js. src/views/peers_view.js src/views/stats_view.js src/views/courts_view.js src/views/parliament_view.js Vistas que no tienen nuestros customizations, safe para refresh completo. src/models/*.js (NUEVOS) Si es un modelo nuevo, copia auto. docs/CHANGELOG.md Copia auto, solo es informativo. SEÑALES DE ALARMA QUE EL AGENTE DEBE DETECTAR --------------------------------------------- Si el scout detecta cualquiera de estos patrones en el diff, debe marcar la sync entera como "needs human": - Cambios en mobile.css / OasisMobile.css del upstream (no debería pasar, pero si pasa, alguien añadió tema móvil al upstream y hay que decidir qué hacer) - Nuevas dependencias en server/package.json que no están en una whitelist conocida - Cambios en CSP de middleware.js que reduzcan permisos - Cambios en SSB_server.js que afecten al modo public de nuestro APK - Cambios en blobHandler.js (lo modificamos a veces) DECISIÓN POR DEFECTO -------------------- Cuando el scout no puede decidir con seguridad: "Si tengo duda, marcar como REVIEW. Es preferible que el humano apruebe cinco minutos a romper la APK." PROCESO DE REVISIÓN HUMANA (5 min lunes mañana) ------------------------------------------------ 1. Abrir scout.md generado el lunes 03:00 2. Lectura rápida de la lista SAFE (debe verse razonable) 3. Lectura cuidadosa de la lista REVIEW 4. Si todo OK: curl POST /api/approve o nada (auto-approve) 5. Si algo no OK: ejecutar manualmente claude con prompt específico para ese conflicto 6. El builder corre solo a las 05:00 REGLA DE ORO ------------ NUNCA bajar AUTO_APPROVE_THRESHOLD por debajo de 0.5. Mejor perder 5 min revisando que perder 2 horas reconstruyendo la APK porque un cambio rompió algo.