Notes

Esborranys protegits i actualitzador a prova

Un JSON incomplet d''IA va corrompre un esborrany: parser més dur i validació

2 min de lectura

Dia de manteniment fi: un esborrany corromput per una resposta d'IA i la decisió de com s'actualitzarà el producte als clients.

Una resposta incompleta va corrompre un esborrany

Una resposta de MiniMax va arribar com a JSON incomplet, degenerant al final. El fallback de reescriptura l'acceptà com a Markdown i el polit va confirmar el contingut abans de validar la resposta següent. Resultat: un esborrany parcial associat a una execució fallida.

L'arregl és doble: el parser ara rebutja embolcalls JSON incomplets en lloc de desar-los com a contingut, i el polit calcula i valida reescriptura i metadades abans d'aplicar cap canvi. Esborrany corrupte eliminat, execució reintentada correctament i un article Lorem ipsum de prova retirat de la programació.

Actualitzacions sense accés al repositori

La decisió del dia: separar panell, API i frontend públic per poder actualitzar només el nucli del producte. Les releases es distribueixen com a imatges privades i immutables, i un actualitzador restringit del host farà backup, migracions, health checks i rollback sense substituir mai les dades, els mitjans ni el frontend personalitzat del client.

Del document al codi

En unes hores la decisió ja té base tècnica: objectiu d'instal·lador per al client amb el frontend base inclòs, dimoni actualitzador connectat a l'API, clau de verificació inclosa al paquet, manifiest d'actualització signat i socket de l'actualitzador muntat a l'API del client. Pels camins, els fixes de sempre: sembrar l'administrador inicial del client, migració idempotent del validador de fonts, rutes compose resoltes i el propietari de la imatge GHCR aprovat per al publish.

Prova de foc: actualitzador i neteja protegits

El vespre va anar de proves d'extrem a extrem. fclean nou amb root i confirmació exacta del domini: sense escriure el domini exacte, no esborra res. Al pilot es va verificar tota la cadena: backup, migració, reinici, rollback i conservació de la web pública del client. Mentrestant, cinc fixes de cadena fina: propietari de la imatge aprovat per al publish, manifiest signat publicat, socket muntat, metadades compose preservades durant les actualitzacions i credencials GHCR arribant al servei systemd. El panell ja mostra la seva pròpia versió.

El botó que no cridava res

L'agent va afegir detecció, confirmació i progrés al resum del panell. El botó es veia, però en prémer no sortia cap POST. Primer va culpar el diàleg natiu i el va substituir per una confirmació visible; continuava sense anar. La causa real: onClick={() => void apply} en comptes d'invocar apply(). Corregit la trucada i amb els errors visibles al panell. La lliçó queda apuntada: comprova la petició real i el callback abans de publicar un arranjament d'UX.

El client mai no veu el repositori, però una versió nova arriba tan controlada com un push: signada, verificada i amb rollback.

Altres entrades del diari