Outline Wiki: Omitsis Edition
Confluence substituït per un Outline nostre: un importador propi que ha portat 343 espais i 4.661 pàgines senceres, i restriccions de lectura pàgina a pàgina que Outline no sabia fer. Sense llicències per persona.

Omitsis documentava la feina a Confluence: 343 espais, 4.661 pàgines, 850 comentaris i 9.387 fitxers adjunts, 8,4 GB en total. Funcionava, i era l'altra meitat de la factura d'Atlassian —la primera ja l'havíem deixat enrere substituint Jira per Plane.
La sortida ha estat la mateixa: agafar Outline, un wiki que et pots allotjar tu mateix, desplegar-lo als nostres servidors i construir-hi a sobre el que faltava. Faltaven dues coses, i totes dues es noten el primer dia: un importador de Confluence, que Outline ven com a funcionalitat Enterprise, i poder restringir la lectura d'una pàgina concreta, que Outline no sap fer de cap manera.
I, com amb Plane, el que fa que això surti a compte no és només la base: és que el desenvolupament s'ha fet amb IA. Cada peça s'ha escrit, provat i documentat amb Claude Code treballant sobre el repositori, amb les proves com a xarxa de seguretat. Una migració de wiki sencera i un model de permisos nou són, totes dues, feina d'equip i de mesos amb les eines d'abans.
La base: Outline
Outline cobreix de sèrie el que s'espera d'un wiki: col·leccions, pàgines imbricades tant com calgui, un editor de blocs amb taules, adjunts i diagrames, comentaris en fil, cerca a tot el text, grups, permisos per col·lecció, integracions i una API. Aquesta part ja hi era, i és bona.
Les captures d'aquesta pàgina són d'Outline tal com el publica el projecte original a getoutline.com. La nostra instal·lació no és pública i el fork és d'ús intern: no el distribuïm.

El que hi hem afegit
Tres connectors nostres i un joc d'eines per als permisos. Tot és a la instal·lació que fem servir cada dia.
Importació des de Confluence
- Espais, pàgines i arbre — Cada espai és una col·lecció i cada pàgina una pàgina, imbricades igual que hi eren. Els espais personals arriben com a privats.
- Autoria i dates — L'autor i les dates de cada pàgina són els que eren, no els del dia de la importació.
- Comentaris — Amb els seus fils i l'estat de resolt. Els que passen del límit d'Outline es parteixen en respostes del mateix autor, amb la mateixa data.
- Adjunts — Els 9.387 fitxers, bytes inclosos, sense el límit de mida que s'aplica la resta del temps.
- Grups i permisos d'espai — Els grups de Confluence amb els seus membres, i els permisos de cada espai com a permisos de la col·lecció.
- Macros — Les etiquetes d'estat passen a text ressaltat, els desplegables a blocs plegables, els avisos a notes i les llistes de tasques a caselles. On hi havia una consulta en viu que no es pot reproduir queda una nota dient què hi havia: una pàgina silenciosament més curta és pitjor que un buit honest.
- Enllaços a Jira — Els 1.117 enllaços a incidències apunten a Plane amb la mateixa clau que tenien, i es resolen sols a mesura que cada projecte hi arriba.
- Sense aturar res — La importació és una comanda dins un contenidor d'usar i llençar, fet amb la mateixa imatge que està servint el lloc. El servei no es toca, no es reinicia i no es torna a desplegar. Es pot provar en sec i per espais solts.

Restringir la lectura d'una pàgina
- L'interruptor — Al final del diàleg de compartir: només la gent que hi surt llistada, i ningú més. Val per tot el que penja de la pàgina, com les restriccions de Confluence.
- Outline no ho sabia fer — El seu model de permisos només suma: una pertinença afegeix gent a qui ja hi arribava per la col·lecció, i no hi ha cap denegació enlloc. Sense això, un wiki vingut de Confluence no es pot reproduir.
- Es comprova per tres camins — La política de permisos, els llistats que filtren en SQL i la cerca. Una prova assegura que una pàgina restringida no surt per cap dels tres, i és el que farà saltar l'alarma el dia que n'aparegui un quart.
- La cerca, en especial — És el camí de lectura més ample que hi ha: mira dins de totes les col·leccions a què arribes. El nostre proveïdor de cerca hereta el d'Outline i hi afegeix la mateixa condició, endollat al punt d'extensió que ells mateixos publiquen.

Auditar i reparar els permisos
- No van viatjar — Acabada la importació, cap restricció de pàgina de Confluence havia sobreviscut: ni una fila a la base de dades. 1.997 pàgines es podien llegir des de fora i 612 no es podien llegir des de dins.
- La mateixa pregunta als dos sistemes — L'auditoria redueix Confluence i Outline a «qui pot llegir aquesta pàgina» i n'ensenya la diferència, tenint en compte que a Confluence les restriccions s'hereten de dalt a baix.
- La reparació — Cada col·lecció rep el públic que espera la majoria de les seves pàgines; les que en volen més reben permisos propis, i les que en volen menys, la restricció nova. 4.607 de 4.659 pàgines tenen exactament el públic que tenien a Confluence, i cap no és il·legible per a qui hi havia d'arribar. Les 52 que queden estan llistades una a una, amb les dues sortides possibles.
- Comprovat contra l'aplicació — No només contra el model: 3.200 peticions fetes com vint persones reals, i la resposta d'Outline va coincidir amb la predicció cada vegada. Zero correus enviats en tota l'operació, que amb milers de permisos nous no és casualitat sinó una decisió de disseny.

Com està fet
És un fork d'Outline v1.10.1, i està pensat per poder seguir pujant de versió. El que hi afegim viu en fitxers que Outline no té —tres connectors propis, endollats als punts d'extensió que ell mateix publica—, i dels seus fitxers només n'hi ha deu de tocats, cinquanta-vuit línies en total, cadascuna declarada i amb el motiu escrit. Un script ho compta i atura la construcció si algú n'hi afegeix una sense dir-ho.
La imatge que corre la construïm nosaltres des del primer desplegament, perquè Outline compila els connectors i empaqueta el frontend en temps de construcció: a una imatge oficial en marxa no s'hi pot afegir res, ni un connector ni un logotip. El desplegament viu en un repositori a part, amb la base de dades i els adjunts dins la còpia de seguretat de cada nit.
Outline es publica amb llicència BUSL-1.1. No és programari lliure —ho serà el 2030, quan passi a Apache 2.0—, però permet modificar-lo explícitament i el permís d'ús cobreix sense discussió un wiki intern com el nostre. El que no cobriria és oferir-lo com a servei a tercers, i per això no ho fem.

El resultat
Els 343 espais són en un servidor nostre, amb els seus comentaris, els seus adjunts i —cosa que no és menor— la mateixa gent podent llegir exactament les mateixes pàgines que abans. El cost torna a ser el de la màquina, no el d'una llicència per persona.
És el segon capítol de la mateixa història que Plane, i l'expliquem pel mateix motiu: amb una base sòlida que et pots endur a casa i IA per adaptar-la, una eina interna de nivell professional deixa de ser un projecte d'equip i de mesos.