Outline Wiki: Omitsis Edition
Confluence sustituido por un Outline nuestro: un importador propio que ha traído 343 espacios y 4.661 páginas enteras, y restricciones de lectura página a página que Outline no sabía hacer. Sin licencias por persona.

Omitsis documentaba el trabajo en Confluence: 343 espacios, 4.661 páginas, 850 comentarios y 9.387 archivos adjuntos, 8,4 GB en total. Funcionaba, y era la otra mitad de la factura de Atlassian —la primera ya la habíamos dejado atrás sustituyendo Jira por Plane.
La salida ha sido la misma: coger Outline, un wiki que puedes alojar tú mismo, desplegarlo en nuestros servidores y construir encima lo que faltaba. Faltaban dos cosas, y las dos se notan el primer día: un importador de Confluence, que Outline vende como funcionalidad Enterprise, y poder restringir la lectura de una página concreta, que Outline no sabe hacer de ninguna manera.
Y, como con Plane, lo que hace que esto salga a cuenta no es solo la base: es que el desarrollo se ha hecho con IA. Cada pieza se ha escrito, probado y documentado con Claude Code trabajando sobre el repositorio, con las pruebas como red de seguridad. Una migración de wiki entera y un modelo de permisos nuevo son, las dos cosas, trabajo de equipo y de meses con las herramientas de antes.
La base: Outline
Outline cubre de serie lo que se espera de un wiki: colecciones, páginas anidadas tanto como haga falta, un editor de bloques con tablas, adjuntos y diagramas, comentarios en hilo, búsqueda en todo el texto, grupos, permisos por colección, integraciones y una API. Esa parte ya estaba, y es buena.
Las capturas de esta página son de Outline tal como lo publica el proyecto original en getoutline.com. Nuestra instalación no es pública y el fork es de uso interno: no lo distribuimos.

Lo que le hemos añadido
Tres conectores nuestros y un juego de herramientas para los permisos. Todo está en la instalación que usamos cada día.
Importación desde Confluence
- Espacios, páginas y árbol — Cada espacio es una colección y cada página una página, anidadas igual que estaban. Los espacios personales llegan como privados.
- Autoría y fechas — El autor y las fechas de cada página son los que eran, no los del día de la importación.
- Comentarios — Con sus hilos y su estado de resuelto. Los que pasan del límite de Outline se parten en respuestas del mismo autor, con la misma fecha.
- Adjuntos — Los 9.387 archivos, bytes incluidos, sin el límite de tamaño que se aplica el resto del tiempo.
- Grupos y permisos de espacio — Los grupos de Confluence con sus miembros, y los permisos de cada espacio como permisos de la colección.
- Macros — Las etiquetas de estado pasan a texto resaltado, los desplegables a bloques plegables, los avisos a notas y las listas de tareas a casillas. Donde había una consulta en vivo que no se puede reproducir queda una nota diciendo qué había: una página silenciosamente más corta es peor que un hueco honesto.
- Enlaces a Jira — Los 1.117 enlaces a incidencias apuntan a Plane con la misma clave que tenían, y se resuelven solos a medida que cada proyecto llega.
- Sin parar nada — La importación es un comando dentro de un contenedor de usar y tirar, hecho con la misma imagen que está sirviendo el sitio. El servicio no se toca, no se reinicia y no se vuelve a desplegar. Se puede probar en seco y por espacios sueltos.

Restringir la lectura de una página
- El interruptor — Al final del diálogo de compartir: solo la gente que aparece en la lista, y nadie más. Vale para todo lo que cuelga de la página, como las restricciones de Confluence.
- Outline no sabía hacerlo — Su modelo de permisos solo suma: una pertenencia añade gente a quien ya llegaba por la colección, y no hay ninguna denegación en ninguna parte. Sin esto, un wiki venido de Confluence no se puede reproducir.
- Se comprueba por tres caminos — La política de permisos, los listados que filtran en SQL y la búsqueda. Una prueba asegura que una página restringida no sale por ninguno de los tres, y es lo que hará saltar la alarma el día que aparezca un cuarto.
- La búsqueda, en especial — Es el camino de lectura más ancho que hay: mira dentro de todas las colecciones a las que llegas. Nuestro proveedor de búsqueda hereda el de Outline y le añade la misma condición, enchufado al punto de extensión que ellos mismos publican.

Auditar y reparar los permisos
- No viajaron — Terminada la importación, ninguna restricción de página de Confluence había sobrevivido: ni una fila en la base de datos. 1.997 páginas se podían leer desde fuera y 612 no se podían leer desde dentro.
- La misma pregunta a los dos sistemas — La auditoría reduce Confluence y Outline a «quién puede leer esta página» y enseña la diferencia, teniendo en cuenta que en Confluence las restricciones se heredan de arriba abajo.
- La reparación — Cada colección recibe el público que espera la mayoría de sus páginas; las que quieren más reciben permisos propios, y las que quieren menos, la restricción nueva. 4.607 de 4.659 páginas tienen exactamente el público que tenían en Confluence, y ninguna es ilegible para quien debía llegar. Las 52 que quedan están listadas una a una, con las dos salidas posibles.
- Comprobado contra la aplicación — No solo contra el modelo: 3.200 peticiones hechas como veinte personas reales, y la respuesta de Outline coincidió con la predicción todas las veces. Cero correos enviados en toda la operación, que con miles de permisos nuevos no es casualidad sino una decisión de diseño.

Cómo está hecho
Es un fork de Outline v1.10.1, y está pensado para poder seguir subiendo de versión. Lo que le añadimos vive en archivos que Outline no tiene —tres conectores propios, enchufados a los puntos de extensión que él mismo publica—, y de sus archivos solo hay diez tocados, cincuenta y ocho líneas en total, cada una declarada y con el motivo escrito. Un script lo cuenta y para la construcción si alguien añade una sin decirlo.
La imagen que corre la construimos nosotros desde el primer despliegue, porque Outline compila los conectores y empaqueta el frontend en tiempo de construcción: a una imagen oficial en marcha no se le puede añadir nada, ni un conector ni un logotipo. El despliegue vive en un repositorio aparte, con la base de datos y los adjuntos dentro de la copia de seguridad de cada noche.
Outline se publica con licencia BUSL-1.1. No es software libre —lo será en 2030, cuando pase a Apache 2.0—, pero permite modificarlo explícitamente y el permiso de uso cubre sin discusión un wiki interno como el nuestro. Lo que no cubriría es ofrecerlo como servicio a terceros, y por eso no lo hacemos.

El resultado
Los 343 espacios están en un servidor nuestro, con sus comentarios, sus adjuntos y —cosa que no es menor— la misma gente pudiendo leer exactamente las mismas páginas que antes. El coste vuelve a ser el de la máquina, no el de una licencia por persona.
Es el segundo capítulo de la misma historia que Plane, y lo contamos por el mismo motivo: con una base sólida que te puedes llevar a casa e IA para adaptarla, una herramienta interna de nivel profesional deja de ser un proyecto de equipo y de meses.