Notes
Esquemes amb IA, ingesta educada i frontend públic nou
Esquemes sectorials proposats per IA, reprocesat històric, controls antiplagi,
3 min de lectura
La nit més llarga de la fase: tancar el coneixement extern de punta a punta i, de camí, reheure tot el frontend públic.
Esquemes sectorials proposats per IA
Des del panell puc triar entre 3 i 10 documents i demanar a la IA camps sectorials validats: nom, tipus, ordre, activació, caducitat i revisió, editables visualment. Guardar crea una versió nova sense destruir les anteriors, i la ingesta posterior només aplica l'esquema actiu i descarta claus o tipus inventats. L'E2E real va proposar 12 camps des de tres documents controlats i va desar la versió correctament.
Reprocesat històric i autoposts amb suport
Una versió nova d'esquema pot reprocessar fins a 20 documents vigents sense tocar els històrics: revisions paral·leles per esquema, vectors reutilitzats i execució idempotent. Els autoposts reben un dossier diversificat per domini amb fets, dates i procedència, filtren per font i confiança i exigeixen un mínim de fonts independents: si falta suport, esborrany o cancel·lació. Dos controls antiplagi: coincidència textual per frases i similitud cosinus per paràgrafs. Amb això, la fase de coneixement extern queda tancada amb E2E complet a producció i guia operativa.
Tres bugs de la revisió
L'auditoria del fitol va treure tres problemes reals: run() reexecutava runs ja en marxa (cron i dispar manual solapats processaven el mateix article dues vegades; ara un run running es retorna sense tocar), el dossier viatjava com a own_content i la IA el rebia com a contingut propi (ara és un bloc a part: «contrasta, no copiïs», amb límit de 16k), i els rate limits acumulaven claus per sempre (memòria sense top; afegit límit amb purga de les més antigues). Test de regressió i 38 tests en verdre.
Ingesta educada per lots
Per no ser bloquejats: màxim 5 documents nous i 10 descàrregues per execució, pausa aleatòria d'1,5–3,5 segons, robots.txt respectat (Disallow i Crawl-delay amb top de 10 s), peticions condicionals amb ETag/Last-Modified i aturada immediata davant 403/429/503. Dos sustos del camí: una migració amb columnes sense segellar versió (resolt amb alembic stamp) i una indentació que va partir la classe SourceDiscovery sense error de sintaxi — la van caçar els tests. 41 tests.
La web pública, de zero
La landing passa de demo a pàgina de venda: dark amb accent llima, terminal viva que narra el pipeline, captures reals del panell i comparativa honesta amb WordPress. La resta del frontend públic puja al mateix nivell: blog editorial, xat terminal, legals i 404 real. Tres baralles: el .rich-text es dimensionava al seu max-width dins de flex (capat amb min(100%, …)), les taules trencaven el mòbil (overflow-x: auto) i la clau: :global() en un CSS pla silenciava cada regla sencera per selector invàlid — setmanes de bugs invisibles evitades entenent que és sintaxi de component scoped. La col·lisió /[lang] vs /[seccion] es va tancar amb portada única de producte: els idiomes viuen al blog.
De matinada, una anotació list ocultava el tipus incorporat i l'API no arrancava: from __future__ import annotations i producció sana. Al matí, segona iteració pública: ritme vertical, diagrames propis, comparativa sense xifres inventades i xat en format terminal. Producció comprovada a 1440/768/390, sense overflow ni errors JS.