Commits
Revisió en dos eixos: cinc troballes reals i fora el codi mort
Repàs amb dos revisors en paral·lel —estàndards del repo i spec— a tot el treball del 3 de novembre. Cinc troballes reals, entre elles un detall de WordPress que cap test no podia caçar; també he tret columnes que ningú llegia i tancat les issues obertes amb evidència.
Ahir em va quedar un dia de treball intens i avui l'he passat pel sedàs: dos revisors en paral·lel, un amb els estàndards del repo i l'altre amb la spec. En van sortir dotze troballes d'estàndards i cinc de spec. Explico les que de veritat compten.
El detall que cap test no cazava
El retorn de Core_Upgrader::upgrade() em va donar la sorpresa del dia: WordPress torna la versió nova com a cadena, no com a array. L'arranjament d'ahir llegia isset( $result->version ), que donava sempre fals, i el panel rebia la versió d'abans d'actualitzar: precisament el que volia evitar. El stub del harness tornava un array, així que el cas sortia verd en un món que no existeix. Ara el stub es comporta com el WordPress de veritat i el cas comprova que la versió reportada és la nova.
Els forats de la spec
El barridet de connectors no es saltava les webs caigudes (el d'inventari sí): una web caiguda es gastava els 180 segons de timeout i encastava la cua seqüencial. I el ZIP del connector només s'oferia a la targeta del llistat, no a l'espai de treball de cada web.
Els de llibres
L'altre grapat era de coerència. El glossari marca «web» com el terme correcte i desaconsella «sitio», però el codi nou feia servir «sitio». La normalització de dates estava duplicada al dashboard i al worker: ara hi ha un helper, site_info.as_utc. A refresh_site() el paràmetre site anava sense tipar. L'endpoint del connector reimplementava el 404 de get_authorized_site en comptes de reutilitzar-lo. L'estat del connector es calculava dins un validador que es modificava a ell mateix: ara ho fa el router, a _site_out. L'actualització del connector no deixava rastre a la bitàcora. I faltava la confirmació abans d'instal·lar codi a la web d'un client, cosa que el repo ja demana per a plugins i temes.
El botó «Refrescar» de cada targeta es queda com a icona amb tooltip: el nom visible el va tancar el grill («Refrescar», amb el tooltip «Refrescar l'inventari d'aquesta web»), i en una targeta amb cinc accions el text no hi cap.
Codi mort fora
Les columnes sites.umami_site_id i sites.kuma_monitor_id s'escrivien però ningú no les llegia: el valor viu de les integracions viu a site_integrations. Pitjor: el camp de l'ID d'Umami es podia editar a «Ajustos de la web» i no feia res — el que compte és el de la pestanya Analítica. Un camp que menteix. I la taula overview_snapshots no la feia servir ningú.
Abans de tocar res vaig mirar producció: les dues columnes eren buides (0 de 9 webs), mentre que les de site_integrations tenien dades (8 de 9). Fora el model, l'esquema, el PATCH i la UI. El README documenta els ALTER opcionals: el repo no té migracions i l'ALTER s'aplica a mà.
Issues tancades amb evidència
Les #24, #29 i #32 seguien obertes amb l'etiqueta ready-for-agent, però el seu treball ja estava fet: el changelog del connector ho explica (la 1.8.1 hi va posar el bloqueig per ruta i el patró «llindar→until» d'una vegada; la 1.8.2, el .htaccess honest), i el journal del 21 d'octubre recull la verificació manual del #25 i el .gitignore dels worktrees. Es tanquen amb aquesta evidència, no amb un «fet» a seques.