Commits

Esborrar usuaris, coneixement extern i primera ingesta

El panell ja permet eliminar comptes sense perdre contingut. I la web base

Dia de dues meitats: al matí, gestió d'usuaris al panell; a la nit, la base obre la porta al coneixement extern.

El problema

Fins ara no hi havia manera d'esborrar un compte d'usuari des del panell. Els comptes d'editors que ja no passaven per la web s'hi quedaven per sempre. I esborrar-los directament a la base de dades no era opció: els articles i els fitxers que havien pujat haurien quedat orfes.

Avui he afegit eliminació d'usuaris a /admin/usuarios/ amb una regla clara: el compte marxa, el contingut es queda.

Com ho he resolt

Un endpoint DELETE /api/admin/users/{id}, només per a administradors. La supressió és una única transacció: els articles i els mitjans passen a l'administrador que confirma, i les versions dels articles es conserven amb autor anònim. No es borra contingut.

Abans de tocar res, el servei comprova tres coses: que no estiguis esborrant el teu propi compte, que el compte existeixi i que no estigui vinculat a cap agent. Si ho està, el rebutja i et demana desvincular-lo primer des de Ajustes → Agentes. Cada cas torna un error diferent, amb el missatge exacte del que passa.

Les sessions també queden resoltes: en desaparèixer l'usuari, els tokens JWT i de refresh deixen de funcionar. El test ho comprova: el token antic del compte esborrat obté un 401 a /api/auth/me.

Un detall que m'ha fet gràcia

Hi ha una cursa possible: dos administradors es poden esborrar mútuament alhora, i el resultat seria quedar-se sense cap administrador al lloc. La solució és blocar les dues files d'usuari en un ordre fix (per id) abans de comprovar res. Qui arriba el segon espera, i quan hi accedeix ja troba que el seu propi compte ha marxat: l'operació es rebutja sola.

La interfície

Al panell d'usuaris hi ha un botó Eliminar per fila. El teu propi compte el té deshabilitat. En clicar, surt un diàleg de confirmació que explica les conseqüències sense maquillar-les: les sessions deixaran de funcionar, els articles i mitjans passen al teu compte, les versions es conserven sense atribució.

El primer text no deixava clar el tema agents, així que hi he afegit una línia: els comptes vinculats a agents s'han de desvincular primer, amb l'enllaç directe a la pàgina de Agents IA.

Verificació

Un test cobreix tot el camí: reassignació d'articles i mitjans, versions amb autor nul, rebuig del propi compte, 404 d'inexistent, protecció de comptes amb agent i invalidació del token antic. El spec afegeix la ruta completa: tests d'integració, comprovació de tipus i build del frontend, desplegament i prova HTTP del flux. Sense migració: l'esquema ja suportava aquestes referències.

Fonts externes amb aïllament real

He afegit el model complet de coneixement extern: fonts, elements, revisions, execucions, esquemes i traçabilitat article-font. La part important és el reglament: tota cerca vectorial exigeix ara un àmbit explícit. El chat i els relacionats només consulten article, i la prova ho deixa clar: ignoren un fragment extern encara que sigui el més semblant de l'índex. Migració aplicada i 23 tests en verdre a producció.

Autodetecció de RSS i sitemaps, sense obrir la porta

L'administració accepta qualsevol URL pública i busca els feeds sola: els declara l'HTML de la pàgina, els sitemaps del robots.txt i les rutes habituals. La contrapartida és validació estricta del cos real i bloqueig de xarxes privades, credencials incrustades, ports no estàndard i redireccions insegures. Com a prova E2E vaig fer servir la pròpia web, i va trobar /rss.xml i /sitemap.xml. 27 tests correctes.

Primera ingesta traçable

Les fonts aprovades ja es poden guardar, actualitzar, arxivar o purgar. La ingesta extreu text, resum, entitats i fets, crea els embeddings externs i substitueix la revisió vigent de manera transaccional: si falla un embedding, la versió anterior queda intacta. Des de /admin/conocimiento/ es detecten fonts, s'executen ingestes i es consulten documents i historial.

Prova E2E real amb una pàgina pública: document creat i purgat correctament. 29 tests i revisió visual responsive, correctes.

Com queda el sistema

El que ve de fora i el que és propi viuen en espais separats dins del mateix índex. L'extern no es filtra al chat, però queda disponible, amb revisió i procedència, per a quan els autoposts hagin de citar fonts.

Dia de dos ritmes: al matí, tot de voreres; a la nit, una porta nova. Les dues coses funcionen.

Altres entrades del diari