Comparando con el nodejs-project de la APK oficial (la referencia buena para el movil, no el git del dev) salia que parte de lo que se saco de backend.js era codigo de movil del propio dev: apagar los modulos que no van, cortar rutas, retocar el HTML, las descargas de la copia de seguridad y ocultar tema y workflow en la bienvenida. - backend.js vuelve a ser su version de movil mas dos lineas (montar nuestro router); modules_view.js, su version de movil - mobile_layer.js se queda con lo nuestro: avatar, filtro y lanzador - la guia lista las 17 diferencias que quedan con la APK oficial (561 lineas) y explica que hay que comparar con la APK, no con el git
9 KiB
Frontera con upstream: que se puede tocar y que no
Las normas del dia a dia estan en GUIA_DE_DESARROLLO.md; esto es la medicion de la que salen.
Medido el 19/10/2026 sobre el repositorio del dev (code.03c8.net/krakenslab/oasis),
de la release 1.0.1 (29/08) a la 1.3.3 (18/10), y comparado con la rama PRUEBAS.
Los scripts estan en el historial de la sesion; para repetirlo basta clonar upstream y
contar con git log --numstat por fichero.
1. Como trabaja el dev
- Una release casi cada dia: 39 entre la 1.0.1 y la 1.3.3, en siete semanas. Cada una es un solo commit ("Oasis release X.Y.Z"), sin historia intermedia: no hay forma de coger un cambio suelto, siempre llega todo junto.
- El backend crece sin parar:
backend.jspaso de ~9.900 a ~15.400 lineas y se toca en 34 de 39 releases. La cadena de middleware (el arraymiddlewaredel final) ha ganado capas en este tiempo: contexto por peticion (requestScope), idioma de primera ejecucion, CSP, etc. - Ya piensa en el movil: tiene su propio tema
OasisMobile.css, usa la misma banderaprocess.env.OASIS_MOBILEque la rama y tiene workflowsactivistsymobile. Va en nuestra direccion; cuanto mas nos pisemos con el, peor. - Las clases CSS cambian, pero poco a poco: de la 1.0.1 a la 1.2.0 aparecen 335 clases y desaparecen 98; hasta la 1.3.1, +304 / -94; de la 1.3.1 a la 1.3.3, +47 / -8. Unas 100 clases muertas cada tres semanas, sobre ~2.200: un 5 %.
Ficheros que mas toca (releases que lo tocan de 39 / lineas movidas):
| Fichero | Releases | Lineas |
|---|---|---|
src/backend/backend.js |
34 | 11.621 |
src/server/package.json + lock |
34 | 22.700 |
src/client/assets/styles/style.css |
32 | 2.522 |
translations/oasis_*.js (los 11) |
31 cada uno | ~2.000 cada uno |
src/views/main_views.js |
31 | 2.634 |
src/views/activity_view.js |
27 | 1.183 |
src/views/tribes_view.js |
23 | 2.675 |
src/client/assets/themes/OasisMobile.css |
21 | 3.040 |
src/views/settings_view.js |
17 | 849 |
src/views/vote_view.js |
14 | 155 |
src/configs/config-manager.js |
11 | 120 |
src/client/assets/styles/mobile.css |
10 | 514 |
src/views/parliament_view.js |
10 | 282 |
src/models/workflows_model.js |
8 | 133 |
src/views/welcome_view.js |
8 | 440 |
src/server/SSB_server.js |
7 | 183 |
src/models/votes_model.js |
4 | 33 |
src/backend/request_guards.js (CSP) |
4 | 111 |
2. El mapa
Rojo: no se toca
Cada linea nuestra aqui es un conflicto casi seguro en la siguiente release, y ademas cambia el comportamiento de la red, no solo como se ve.
src/backend/backend.js: rutas y, sobre todo, la cadena demiddleware.src/models/*de upstream: lo que se publica en el log SSB y como se cuenta. Si dos nodos cuentan distinto (votos, tribus, gobierno), la red se rompe. Ejemplo: "quien crea una votacion no vota" es una regla devotes_model.js; cambiarla en la rama haria que nuestro movil y un escritorio dieran resultados distintos.src/server/*(arranque de SSB,ssb_config,package.jsony dependencias).src/backend/request_guards.js(CSP: no hay estilos ni scripts en linea, y asi debe seguir).translations/oasis_*.js: se reescriben en 31 de 39 releases.src/client/assets/styles/style.cssymobile.css: son del dev.src/client/assets/themes/*.cssde upstream, incluidoOasisMobile.css.
Ambar: solo un gancho de una linea, con la bandera de movil
Las vistas de upstream (main_views.js, tribes_view.js, vote_view.js,
settings_view.js...). Se reescriben a menudo, asi que lo que la rama necesite ahi va
como una llamada a una funcion nuestra, envuelta en
process.env.OASIS_MOBILE === '1', y la logica vive en un fichero propio. Si el dev
reescribe la vista, se vuelve a poner una linea, no se reconstruye una funcion.
Verde: nuestro, sin limite
- Hojas propias:
themes/Acampada.css,styles/mobile_base.css,styles/hive_acampada.css,styles/mobile_ux.css. - Vistas propias:
hive_views.js,mobile_icons.js,identities_view.jsy lasmobile_*.js. - El router propio
src/backend/fork_routes.js: va justo antes del de upstream en la cadena y ve todas las peticiones. Puede atender rutas nuevas, o envolver una ruta de upstream (dejarla hacer y retocar la respuesta) sin editarla. - Traducciones propias en
i18n_fork.js(se mezclan encima de las de upstream). - Modelo propio
fork_workflows.js. - Todo
android/.
3. Como esta la rama hoy
43 ficheros de upstream modificados y 22 propios. Lo que mas pesa:
| Fichero de upstream | Lineas distintas | Riesgo |
|---|---|---|
themes/OasisMobile.css |
4.873 | Alto: es casi otro fichero. El dev lo toca en 21/39 releases y cada vez hay que elegir entre su version y la nuestra. |
views/main_views.js |
173 | Alto (31/39) |
backend/backend.js |
133 (21 trozos) | Alto (34/39) |
configs/oasis-config.json |
135 | Medio: es la config de serie del movil |
backend/blobHandler.js |
190 | Medio (limpieza de fotos) |
backend/updater.js |
133 | Bajo (3/39) |
views/modules_view.js |
91 | Bajo (5/39) |
views/parliament_view.js, settings_view.js, vote_view.js, tribes_view.js |
50-75 cada una | Medio-alto |
models/workflows_model.js |
31 | Medio: redefine el workflow activists del dev |
server/ssb_config.js, SSB_server.js |
40 | Medio (multicuenta) |
Las hojas propias y OasisMobile.css llevan selectores a clases que ya no pinta nadie:
61 en OasisMobile.css, 29 en hive_acampada.css, 5 en Acampada.css. No rompen
nada, pero son peso muerto y confunden.
4. Reglas para cada cambio
- Primero CSS. Si se arregla con una hoja propia, se arregla ahi.
- Si hace falta HTML distinto: funcion en un fichero propio + una linea en la vista de upstream, con la bandera de movil.
- Si hace falta una ruta o retocar una respuesta: en el router propio. Nunca una
ruta nueva ni un middleware en
backend.js. - Nunca cambiar lo que se publica ni como se cuenta (modelos de upstream).
- Textos nuevos en
i18n_fork.js, en los 11 idiomas. - Nada en linea: la CSP no deja
style=""ni<script>en la pagina. - Antes de integrar una release, repetir esta medicion y mirar si alguna clase de la que dependemos ha desaparecido.
5. Plan para sanear la rama
- Fase A (hecha el 19/10): lo del 19/10 que se metio en ficheros del dev sale a ficheros propios. Ver la seccion 6.
- Fase B (hecha el 19/10):
OasisMobile.cssvuelve a ser la del dev, identica a la 1.3.3. Nuestra maqueta esta enstyles/mobile_base.css, que el movil carga siempre antes del skin. Con el skin OasisMobile se ve el tema del dev encima de la maqueta. - Fase C (hecha el 19/10): de los 20 trozos de
backend.jsquedan 9 (21 lineas). El resto (rutas cortadas en el movil, modulos que no van, avatar, lanzador, retoques del HTML, descargas de la copia de seguridad, cambio de tema) esta enbackend/mobile_layer.jsy enfork_routes.js. Los que quedan no se pueden hacer desde fuera: expresiones regulares para Node 18, no abrir el navegador, fotos duplicadas, modo chats y el montaje del router. - Fase D (hecha el 19/10):
activistsvuelve a ser el del dev. Karvan y el workflowacampadase registran desdemodels/fork_workflows.js. La config de serie del movil coincide conacampada. Queda enworkflows_model.jsla logica de skins del movil. - Correccion (19/10, noche): para el movil la referencia buena es el nodejs-project de la APK oficial, no el git del dev. Parte de lo que la fase C saco de backend.js era codigo de movil del propio dev; backend.js vuelve a ser su version de movil mas dos lineas (montar nuestro router), y modules_view.js su version de movil. Contra la APK oficial la rama cambia 17 ficheros y 561 lineas; la lista esta en la guia.
- Fuera Karvan (19/10): el dev ya trae Telefono y Salas, asi que se quita el modulo
propio de salas y llamadas (modelo, vista, JS, CSS, router, pruebas, textos).
Clear-SNH.cssymodules_view.jsvuelven a ser identicos a los del dev y la linea deSSB_server.jsque enchufaba el audio de Android pasa amain.js, usando lossetAudioFactory,setVideoFactoryysetStreamFactoryque el propio dev exporta. - Fase E (hecha el 19/10): fuera 153 selectores muertos de
mobile_base.css,hive_acampada.cssyAcampada.css(287 lineas). Comparado pixel a pixel en 14 pantallas: identicas.
6. Fase A: lo que se ha movido
| Antes (en ficheros del dev) | Ahora |
|---|---|
backend.js: checkMod envuelto para recordar la seccion apagada |
El router propio mira las redirecciones a /modules de vuelta |
backend.js: ruta POST /modules/enable y ?saved=1 tras guardar |
Router propio |
modules_view.js: vista de Modulos del movil |
views/mobile_modules_view.js, servida por el router propio |
workflows_model.js: cuatro modulos mas en activists |
Workflow propio acampada registrado desde models/fork_workflows.js |
vote_view.js, tribes_view.js, settings_view.js, main_views.js, welcome_view.js: funciones nuevas |
Funciones en views/mobile_ui.js; en la vista de upstream queda la llamada |